2012-06-03 69 views
0

我是在cocos2D中使用CCAnimations的新手,我遇到了一個我很難解決的問題。EXC_BAD_ACCESS當切換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' 

0x7f808d93e9f0runningAnimation地址。

  1. 我在做什麼錯?
  2. 是否有這樣做的更好的辦法?

謝謝!

回答

2

錯誤消息告訴你,在出錯的時刻,0x7f808d93e9f0是NSCTFontDescriptor對象的地址。可能的原因是你沒有保留runningAnimation,並且其內存已被回收用於不同的對象。

(顯示的runningAnimation如果沒有明顯的聲明如何發生的事情。)

+0

在動畫上調用保留修復它。謝謝! – jonmorgan

0

你必須要使用它們每次都重新創建行動。在你的情況下,你試圖在解除分配後使用動作。