所以我每秒创建一个Sprite,但是现在我想用spriteSheetAnimation替换这个Sprite。但是当我运行此代码时,我的应用崩溃了:

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

最佳答案

编辑:
从收到的错误类型(堆栈跟踪不足)中,您可以进行无限次递归(即最终直接或间接调用自身的方法)。 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];

关于iphone - 我的spriteSheet动画使我的应用崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10294437/

10-12 03:40
查看更多