0

对 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

在方法看起来像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只是表现正常,为什么会发生这种情况?


添加了要点代码

https://gist.github.com/2940466

4

1 回答 1

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];

看看崩溃是否继续发生。

如果您提供更多代码,则可以进一步帮助您。

于 2012-06-16T08:04:39.287 回答