- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
这篇blog是由iOS Tutorial Team的成员 ?Johann Fradj发表的,他目前是一位全职的资深iOS开发工程师。他还是Hot Apps Factory的创始人,该公司开发了App Cooker。
?
添加A星寻路算法到简单的Cocos2D游戏中!
在本篇教程中,你将学到如何在一款简单的cocos2D游戏中使用A星寻路算法。
在学习本篇教程之前,如果你先阅读《A星(A*)寻路算法在iOS开发的运用》将会有所帮助。该文章图文并茂的介绍了这个我们将要实现的算法的基本概念。
在学习本篇教程之前,如果你有Cocos2D的iOS开发经验,将会有所帮助。如果没有也没关系,因为你可以将这里讲解的例子迁移到其他的语言或者框架中。
Maze猫
首先介绍下我们将要在本篇教程中开发的简单游戏。
?
前往下载本篇教程的工程代码。编译运行工程,你将看到以下画面。
在这款游戏中,你扮演着一只小偷猫,在一个由危险的狗守护着的地牢里小心穿行。如果你试图穿过一只狗,他会把你吃掉 – 除非你可以用骨头去贿赂它!
?
所以在这款游戏中,你的任务是尝试以正确的顺序捡起骨头,然后 寻找路线 穿过狗逃离。
?
注意到猫只能水平或者垂直的移动(例如不能斜线移动),并且会从一个方块的中心点移动到另一个中心点。每个方块既可以是可通行的也可以是不可通行的。
?
尝试下这款游戏,看看你能否找到出路!建议你阅读代码以熟悉它的原理。这是一款相当普通的方块-地图式游戏,我们会在接下来的教程中修改它并使用上A星寻路算法。
?
Maze猫和A星概览
正如你所看到的,当你点击地图某处时,猫会沿着你点击的方向跳到相邻的方块上。我们想对程序做修改,让猫持续的往你点击的方块方向前进,就像许多RPGs或者point-and-click冒险类游戏。
?
让我们看下控制触摸事件代码的工作原理。如果你打开HelloWorldLayer.m文件,你将看到像下面这样去实现触摸操作:
?
1.- (void)registerWithTouchDispatcher {2. ???[[CCTouchDispatcher sharedDispatcher] addTargetedDelegate:self priority:0 swallowsTouches:YES];3.}4.- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {5.?6. 牋爄f (_gameOver) return NO;7.?8. 牋燙GPoint touchLocation = [_tileMap convertTouchToNodeSpace:touch] ;9. 牋燵_cat moveToward:touchLocation];10. 牋爎eturn YES;11.}
你可以看到这里只是对猫精灵调用了一个方法,让猫在方块地图上往你点击的地方移动。
?
我们现在要做的是修改在CatSprite.m文件中的以下方法,寻找到达该点的最短路径,并且开始前进:1.- (void)moveToward:(CGPoint)target {2. ???// Figure out the shortest path to the target, and start following it!3.}
创建ShortestPathStep类
我们开始创建一个内部类,代表路径上的一步操作。在这种情况下,它是一个方块和由A星算法计算出来的的F,G和H scores。 现在添加以下代码到CatSprite.m文件的顶部(在CatSprite的 @implementation上面):1.// A class that represents a step of the computed path2.@interface ShortestPathStep : NSObject3.{4. ???CGPoint position;5. ???int gScore;6. ???int hScore;7. 牋燬hortestPathStep *parent;8.}9.@property (nonatomic , assign) CGPoint position;10.@property (nonatomic, assign) int gScore;11.@property (nonatomic, assign) int hScore;12.@property (nonatomic, assign) ShortestPathStep *parent;13.?14.- (id)initWithPosition:
文档评论(0)