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

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! 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 initWithLayer
self.spOpenSteps = nil;
self.spClosedSteps = nil;

//Add dealloc method to CatSprite
- (void)dealloc
{
    [spOpenSteps release]; spOpenSteps = nil;
    [spClosedSteps release]; spClosedSteps = nil;
    [super dealloc];
}
注意:由于原文写作时间比较早,其中一些实例变量声明的方式以及销毁时的处理现在已 经不需要了,你可以在阅读本系列博文中的代码时将这一条记在心中 ;) 猫猪注.

你可能感兴趣的:(游戏,算法,cocos2d,A星)