新鲜到objC和cocos2d:)
我正在关注“用iOS5学习cocos2d游戏开发”,在第4章中,有一个“DoodleDrop”游戏。
在GameScene.h
中定义一些变量
@interface GameScene : CCLayer
{
CCSprite *player;
CGPoint playerVelocity;
CCArray *spiders;
CGSize screenSize;
int dropedSpidersCount;
float duration;
}
+ (CCScene *)scene;
@end
<{1>} GameScene.m
init
方法如下所示
- (id)init
{
if (self = [super init]) {
duration = 4.0;
[self createPlayer];
[self createSpiders]; // spiders were inited here.
[self resetSpiders];
[self schedule:@selector(chooseSpider:) interval:0.7];
}
return self;
}
在chooseSpider
时,我无法访问spiders
,xcode破解了
在其他方法中,spiders
或duration
只是表现正常,为什么会发生这种情况?
添加了gist代码
答案 0 :(得分:1)
在检查您的代码后,我建议您尝试此修复:
- (void)createSpiders
{
CCSprite *tempSpider = [CCSprite spriteWithFile:@"spider.png"];
CGSize spiderSize = [tempSpider texture].contentSize;
int spiderCount = screenSize.width / spiderSize.width;
spiders = [[CCArray arrayWithCapacity:spiderCount] retain];
for (int i = 0; i < spiderCount; i++) {
CCSprite *spider = [CCSprite spriteWithFile:@"spider.png"];
[self addChild:spider];
[spiders addObject:spider];
}
}
唯一的区别在于:
spiders = [[CCArray arrayWithCapacity:spiderCount] retain];
实际上,如果你没有保留spiders
个对象,它将在下一次运行循环迭代时自动释放。
老答案:
如果没有看到更多代码,就无法确切地说出发生了什么,但似乎在创建蜘蛛和chooseSpiders
的实际执行之间的间隔中,您的spiders
数组将被释放。
快速尝试,我建议添加:
[spiders retain];
之前打电话
[self schedule:@selector(chooseSpider:) interval:0.7];
然后看到崩溃继续发生。
如果您提供更多代码,则可以进一步帮助您。