如何在Cocos2D游戏中实现A*寻路算法(五)

如何在Cocos2D游戏中实现A*寻路算法(五),第1张

概述大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途。同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该翻译稿之人无任何关系。谢谢合作! 跟随着黄色砖块前进 现在我们已经找到了我们的路径,我们只需要让猫咪跟随它.

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;)

免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流之用,请勿进行商业用途。同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该翻译稿之人无任何关系。谢谢合作!

跟随着黄色砖块前进

现在我们已经找到了我们的路径,我们只需要让猫咪跟随它.

我们接下来要做的是记住整个路径,并且使得猫咪根据路径一步一步的移动.

在CatSprite.h中建立一个存储路径的数组,在CatSprite的@interface的私有段内添加:

NSMutableArray *shortestPath;

然后完成CatSprite.m中的如下修改:

// Add insIDe the CatSprite private propertIEs and methods section@property (nonatomic,retain) NSMutableArray *shortestPath;// After the CatSprite @implementation@synthesize shortestPath;// InsIDe initWithLayerself.shortestPath = nil;// InsIDe dealloc [shortestPath release]; shortestPath = nil;

现在我们将创建一个存储整个路径并且管理开始动画的方法,在CatSprite.m中完成如下修改:

// Add insIDe the CatSprite private propertIEs and methods section- (voID)constructPathAndStartAnimationFromStep:(ShortestPathStep *)step;// InsIDe movetoward,comment out the pathFound BOol//BOol pathFound = NO;// InsIDe movetoward,replace pathFound = YES with this:[self constructPathAndStartAnimationFromStep:currentStep];// Also comment all of the deBUGging statements below that.// InsIDe movetoward,replace if (!pathFound) with this:if (self.shortestPath == nil) { // No path found// Add this new method:// Go backward from a step (the final one) to reconstruct the shortest computed path- (voID)constructPathAndStartAnimationFromStep:(ShortestPathStep *)step{    self.shortestPath = [NSMutableArray array];    do {        if (step.parent != nil) { // Don't add the last step which is the start position (remember we go backward,so the last one is the origin position ;-)            [self.shortestPath insertObject:step atIndex:0]; // Always insert at index 0 to reverse the path        }        step = step.parent; // Go backward    } while (step != nil); // Until there is no more parents    for (ShortestPathStep *s in self.shortestPath) {        NSLog(@"%@",s);    }}

注意在movetoward方法中,我们调用了一个新的方法替换了原来的在控制台中打印结果的代码,并且我们删除了pathFound变量.像往常一样,constructPathAndStartAnimationFromStep方法中的注释详细解释了实际发生了什么.

现在编译运行,如果你触摸和我们之前说过的相同的瓦块,你应该看到如下日志:

<ShortestPathStep: 0x6b37160>  pos=[24;1]  g=1  h=4  f=5<ShortestPathStep: 0x6b37340>  pos=[23;1]  g=2  h=3  f=5<ShortestPathStep: 0x6b37590>  pos=[22;1]  g=3  h=2  f=5<ShortestPathStep: 0x6b395c0>  pos=[21;1]  g=4  h=3  f=7<ShortestPathStep: 0x6b37ae0>  pos=[20;1]  g=5  h=4  f=9<ShortestPathStep: 0x6b38c60>  pos=[20;2]  g=6  h=3  f=9<ShortestPathStep: 0x6b36510>  pos=[20;3]  g=7  h=2  f=9<ShortestPathStep: 0x6b3b850>  pos=[21;3]  g=8  h=1  f=9<ShortestPathStep: 0x6b3cf30>  pos=[22;3]  g=9  h=0  f=9

注意它和以前是相似的,除了现在它是从开始到结束(反转以前的结果)并且存放在数组中的数据更便于我们去使用.

最后要做的事情是通过遍历shortestPath数组并且动画显示猫咪跟随的路径.为了实现这个目的,我们将创建一个方法从数组中d出每一步的数据,使得猫咪可以移动到该位置,并且添加一个回调方法去重复调用这个方法直到路径完成.

在CatSprite.m中完成以下修改:

// Add insIDe the CatSprite private propertIEs and methods section- (voID)popStepAndAnimate;// Add to bottom of constructPathAndStartAnimationFromStep[self popStepAndAnimate];// Add new method- (voID)popStepAndAnimate{       // Check if there remains path steps to go through    if ([self.shortestPath count] == 0) {        self.shortestPath = nil;        return;    }    // Get the next step to move to    ShortestPathStep *s = [self.shortestPath objectAtIndex:0];    // Prepare the action and the callback    ID moveAction = [CCMoveto actionWithDuration:0.4 position:[_layer positionForTileCoord:s.position]];    ID moveCallback = [CCCallFunc actionWithTarget:self selector:@selector(popStepAndAnimate)]; // set the method itself as the callback    // Remove the step    [self.shortestPath removeObjectAtIndex:0];    // Play actions    [self runAction:[CCSequence actions:moveAction,moveCallback,nil]];}

编译然后运行…

我们的猫咪自动移动到你点击的位置上了 :-)

总结

以上是内存溢出为你收集整理的如何在Cocos2D游戏中实现A*寻路算法(五)全部内容,希望文章能够帮你解决如何在Cocos2D游戏中实现A*寻路算法(五)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1075040.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存