所以我每秒创建一个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/