2011-06-25 32 views
0

我遇到了一個針對我正在開發的iPhone的cocos2d應用程序的問題。有時在場景改變時出現。該應用程序stucks和控制檯開始打印此聲明:聲明失敗 - [CCSprite setTexture:]

斷言失敗 - [CCSprite的SetTexture:]

我想請你給我建議以正確的方式來調試它,因爲這個問題並不總是發生,有並不是錯誤發生的準確標誌。

預先感謝您

......幾個小時後:內存警告後,將出現問題。因此,它是由於動畫正在利用緩存的紋理圖集和相關工作表時刷新的子畫面緩存。我能做些什麼來處理它?

回答

2

我會在[CCSprite setTexture:]中設置一個斷點,並從那裏檢查堆棧跟蹤並返回到您的違規呼叫。當然,這隻會在失敗發生的情況下成功。

在我的cocos2d安裝(0.9.5),聲稱在setTexture可以是:

NSAssert(! usesBatchNode_, @"CCSprite: setTexture doesn't work when the sprite is rendered using a CCSpriteBatchNode"); 

// accept texture==nil as argument 
NSAssert(!texture || [texture isKindOfClass:[CCTexture2D class]], @"setTexture expects a CCTexture2D. Invalid argument"); 

那麼,你是錯做這類原因。

編輯你對此有何評論後:

您的appDelegate定義大概是:

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application { 
[[CCDirector sharedDirector] purgeCachedData]; 
} 

嘗試使用:

[[CCTextureCache sharedTextureCache] removeUnusedTextures]; 

,而不是[[CCDirector sharedDirector] purgeCachedData]。希望事情會改善。

+0

內存警告後出現問題。因此,它是由於動畫正在利用緩存的紋理圖集和相關工作表時刷新的子畫面緩存。我能做些什麼來處理它? – Sindico

+0

請參閱我的編輯。 – sergio