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

来源:互联网 发布:ios看电视直播软件 编辑:程序博客网 时间:2024/04/28 01:17

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


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

创建开放和闭合列表

接下来我们将使用2个NSMutableArray来跟踪保存我们的开放和闭合列表.

你可能奇怪为什么不用NSMutableSet代替.好吧,这里有2个原因:

  1. NSMutableSet不是有序的,但是我们想要列表按照F值来排序以便快速查找.
  2. NSMutableSet并不会调用我们在ShortestPathStep类中的isEqual方法去测试是否2个元素是相同的(但是我们需要它这么做).

让我们在CatSprite.h中添加这些数组的定义:

@interface CatSprite : CCSprite {    //...@private    NSMutableArray *spOpenSteps;    NSMutableArray *spClosedSteps;}

然后在CatSprite.m中做出如下修改:

// Add to top of file// Private properties and methods@interface CatSprite () @property (nonatomic, retain) NSMutableArray *spOpenSteps;@property (nonatomic, retain) NSMutableArray *spClosedSteps;@end// Add after @implementation CatSprite@synthesize spOpenSteps;@synthesize spClosedSteps;// Add inside initWithLayerself.spOpenSteps = nil;self.spClosedSteps = nil;//Add dealloc method to CatSprite- (void)dealloc{    [spOpenSteps release]; spOpenSteps = nil;    [spClosedSteps release]; spClosedSteps = nil;    [super dealloc];}
注意:由于原文写作时间比较早,其中一些实例变量声明的方式以及销毁时的处理现在已经不需要了,你可以在阅读本系列博文中的代码时将这一条记在心中 ;) 猫猪注.
0 0