2011-08-05 92 views
0

我在Mac OS X 10.6.8上使用Xcode 4與Cocos2D。我正在試圖爲動畫使用精靈表。這是我有的代碼:添加對象時NSMutableArray崩潰應用程序

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"scrollAnimation.plist"]; 
CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"scrollAnimation.png"]; 
[self addChild:spriteSheet]; 

NSMutableArray *animFrames = [NSMutableArray array]; 

for(int i = 0; i < 10; i++) { 
    [animFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName: [NSString stringWithFormat:@"scroll%d.png", i]]]; 
} 

self.scrollAnim = [CCAnimation animationWithFrames:animFrames delay:0.05f]; 

self.scroll = [CCSprite spriteWithSpriteFrameName:@"scroll0.png"]; 
_scroll.position = ccp(_winSize.width*1.5, _winSize.height*1.5); 
[spriteSheet addChild:_scroll]; 

這在模擬器中正常工作,但是當我得到設備構建時,它崩潰了。我已經縮小到將對象添加到數組。如果我在for循環之前註釋掉所有內容,那麼只需添加spriteFrameByName部分即可。但是,當我嘗試將其放入數組中時,應用程序會在設備上崩潰。

任何幫助?

+0

你沒有任何錯誤信息與崩潰?那個時候堆棧跟蹤看起來像什麼? – sergio

+0

出於某種原因,在我的設備上進行測試時,我無法收到任何錯誤消息。它在模擬器上完美工作,所以我不會在那裏發生任何錯誤。 – user794895

回答

0

這種行爲最可能的原因是您的應用程序佔用了它擁有的所有內存,操作系統將其殺死。我這樣說是因爲在這種情況下,您通常不會從崩潰日誌中獲得任何提示,而且在您的應用在模擬器中工作但不在設備中時也很典型。

因此,爲了調查問題,我會首先檢查是否存在內存警告痕跡(如果covos2d已啓用跟蹤)在崩潰之前。這將是一個明確的跡象。

實際上,如果出現內存警告,還有第二種可能的結果導致崩潰。您的應用程序收到內存警告(查看cocos2d跟蹤);你的紋理緩存會被清空,所以當你嘗試使用你認爲預緩存的紋理時,應用會崩潰。但在這種情況下,錯誤會更加冗長。如果你認爲這個問題與此有關,看看這篇文章:http://labs.freescapes.org/blog/2011/07/cocos2d-and-memory-warnings/

0

我發現的東西在模擬器中工作,但沒有在設備上工作的一個原因是因爲該文件的名稱輸入錯誤。我會檢查,以確保scrollAnimation.plist的名稱不是真的ScrollAnimation.plist或scrollanimation.plist和scroll0.png同樣的事情,它不是真的命名Scroll0.png

相關問題