我刚开始在cocos2D中使用CCAnimations
,我遇到了一个我很难解决的问题。
我正在制作一个基本的平台游戏,玩家精灵有各种动画需要根据玩家的状态运行。
我在图层的init
方法中有以下代码:
sprite = [CCSprite spriteWithSpriteFrameName:@"stand.png"];
standingSprites = [NSArray arrayWithObjects:
[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"stand.png"],
nil];
runningSprites = [NSArray arrayWithObjects:
[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"run1.png"],
[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:@"run2.png"],
nil];
standingAnimation = [CCAnimation animationWithFrames:standingSprites delay:0.2f];
runningAnimation = [CCAnimation animationWithFrames:runningSprites delay:0.2f];
animationAction = [CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:standingAnimation]];
[sprite runAction:animationAction];
这与两个动画中的任何一个都可以正常工作。但是,我想在玩家静止时运行standingAnimation
并在玩家运行时runningAnimation
运行。我尝试按如下方式执行此操作:
-(void)walk {
if(!isWalking) {
isWalking = true;
[sprite stopAction:animationAction];
animationAction = [CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:runningAnimation]];
[sprite runAction:animationAction];
}
}
第二行到最后一行会导致程序崩溃,从而导致EXC_BAD_ACCESS
(在引用0x0
时)。单步执行调试器中的walk
,似乎没有任何相关指针为空。
从堆栈跟踪:
2012-06-03 10:59:59.907 ThirtyMinutes[9876:6403] *** Terminating app
due to uncaught exception 'NSInvalidArgumentException', reason:
'-[NSCTFontDescriptor frames]: unrecognized selector sent to instance
0x7f808d93e9f0'
0x7f808d93e9f0
是runningAnimation
的地址。
谢谢!
答案 0 :(得分:2)
错误消息告诉您,在错误发生时,0x7f808d93e9f0是NSCTFontDescriptor对象的地址。可能的原因是你没有保留runningAnimation
并且已经为不同的对象回收了它的记忆。
(显示runningAnimation
的声明,如果它不明显是如何发生的话。)
答案 1 :(得分:0)
每次要使用它们时都必须重新创建操作。在您的情况下,您尝试在取消分配后使用操作。