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.minit次のようになります

- (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、次の実行ループの反復で自動解放されます。

古い答え:

より多くのコードを見なければ、何が起こっているのかを正確に言うことはできませんが、スパイダーを作成してから実際に実行するまでの間にchooseSpidersspiders配列の割り当てが解除されるようです。

簡単な試みとして、次を追加することをお勧めします。

[spiders retain];

電話する前に

    [self schedule:@selector(chooseSpider:) interval:0.7];

クラッシュが発生し続けるかどうかを確認します。

より多くのコードを提供すると、さらに役立つ可能性があります。

于 2012-06-16T08:04:39.287 に答える