2012-04-24 5 views
1

私は毎秒スプライトを作成していますが、今度はこのスプライトをspriteSheetAnimationに置き換えたいと思います。私のスプライトシートアニメーションが私のアプリケーションをクラッシュさせます

- (void)spawnCat { 
    CCSpriteBatchNode *spriteSheet2 = [CCSpriteBatchNode batchNodeWithFile:@"AnimBulle.png"]; 
    [self addChild:spriteSheet2]; 

    // Load up the frames of our animation 
    NSMutableArray *walkAnimFrames = [NSMutableArray array]; 
    for(int i = 1; i <= 8; ++i) { 
     [walkAnimFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"AnimBulle%d.png", i]]]; 
    } 
    CCAnimation *walkAnim = [CCAnimation animationWithFrames:walkAnimFrames 
                 delay:0.1f]; 
    [target runAction:_walkAction]; 
    target.tag = 1; 
    [_targets addObject:target]; 

    [self addBoxBodyForSprite:target]; 
    [spriteSheet2 addChild:target z:0 tag:1]; 
    id actionMove = [CCMoveTo actionWithDuration:actualDuration 
             position:ccp(240, 160)]; 
    id actionMoveDone = [CCCallFuncN actionWithTarget:self 
              selector:@selector(spriteDone:)]; 
[target runAction:[CCSequence actions:actionMove, actionMoveDone, nil]]; 
} 
+0

どのような種類のクラッシュですか?コンソール上の出力は何ですか? – sergio

+0

私はいつも私はコンソールに何があるのか​​見当がつかないほどフレームが足りないので、私には分かりません:/ –

答えて

1

はEDIT:私は私のアプリがクラッシュし、このコードを実行するときには あなたが(ない十分なスタックトレース)を取得エラーの種類から、あなたは、inifinite再帰(すなわち、自分自身を呼び出して終了方法を持っています直接的または間接的に)。 spawnCatのコードは、このような無限の再帰を伴うようには見えないので、問題は他のどこかにあるはずです。

spawnCatへの連絡方法を教えてください。アニメーションを作成するために実行されるメソッドにいくつかのNSLogトレースを置くことができるので、誰かが自分自身を呼び出し続けているかどうかを確認できますか?

オリジナル回答: これはあなたが意味したものですか?

CCAnimation *walkAnim = [CCAnimation animationWithFrames:walkAnimFrames delay:0.1f]; 
[target runAction:_walkAction]; 

私は_walkAction初期設定を見ることはできませんが、私はあなたが後は次のように何かをして、アニメーションを作成することを行う期待:

CCAnimation *walkAnim = [CCAnimation animationWithFrames:walkAnimFrames delay:0.1f]; 
_walkAction = [CCAnimate actionWithAnimation:walkAnim]; 
[target runAction:_walkAction]; 
+0

これは私がやったことです、私は質問に入れて忘れましたが、なぜですか私のアプリクラッシュ –

+0

私を助けてください! : –

+0

エラー: "十分なフレームがスタックにありません"すべてのプロジェクトに来る、これに固有のものではありません。しかし、これはメインのエラーではありません。ビルドと実行ができます。私はなぜ具体的にはわかりません –

0

私はコード内で見ることができる唯一のことはありますあなたのスプライトフレームが見つからない可能性があります。配列にnilを追加しようとすると、厄介な結果を得ることができます。私は次のようにループを修正します(ロギングに役立ちます)。

for(int i = 1; i <= 8; ++i) { 
    NSString *sfn = [NSString stringWithFormat:@"AnimBulle%d.png", i]; 
    CCSpriteFrame *sf = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:sfn]; 
    if(sf) { 
     [walkAnimFrames addObject:sf]; 
    } else { 
     CCLOGERROR(@"%@<spawnCat> : *** Sprite frame named [%@] not found in cache, bailing out.",self.class,sfn); 
     return; // ok here, nothing is retained before this may be executed 
    } 
} 

また、あなたが実際にこれを呼び出す前の.plistと質感でspriteFrameCacheをロードし、あなたがどこか他の実行ループ内キャッシュからremoveUnusedSpriteFramesいけないということを確認することができます。

関連する問題