2012-12-19 108 views
2

這個問題有很多答案。但他們都是不正確Cocos2d。正確加載和存儲圖像?

例如,如果我用一個CCSprite對象創建了一個CCLayer對象。我有3個紋理,我想在每次觸摸之間切換它們。

比如我會用類似這樣:

link

我運行模擬器這個應用程序。然後我打電話給記憶警告。然後我嘗試在圖像(紋理)之間切換。我看到3張圖像中的2張被刪除(圖像除外,同時出現內存警告)。

我試着使用CCSprite和ССTexture2D的保留/釋放命令,但是它們會導致釋放對象的dealloc方法永遠不會被調用的情況。

那麼如何正確存儲它們呢?我想將它們存儲在內存警告中,並在當前層被銷燬時釋放/刪除它們。

回答

3

將它們存儲在一個紋理圖集中,使用Texture Packer創建。然後就像調用[Sprite setDisplayFrame:frameName]來切換顯示的紋理一樣簡單。

2

默認情況下,內存警告cocos2d將刪除未使用的紋理。整個內存警告點在於操作系統告訴你的應用程序「嘿,這不好,減少你的內存需求,否則我會關閉你」,你的應用程序應該像「哎呀,抱歉,現在釋放內存」一樣。

+1

他們不是沒有使用!我想選擇要去除的紋理。不是所有的人。 iOS是否刪除了可見矩形之外的所有圖形對象?決不。它允許在didReceiveMeroryWarning中寫入某些內容。 – Gargo

2

如果您在預加載紋理時收到內存警告,則cocos2d的移除未使用紋理的默認行爲會將您拍到腳中。 More about this issue here.

我的建議:刪除調用以清除AppDelegate中的內存警告方法中的cocos2d的緩存。當然,你想對你的內存使用情況加倍小心。或者,您可以在預加載圖像時簡單地禁用此行爲,但這可能只是將問題轉移到稍後的一點。

+1

因此,最好是調用[CCSprite spriteWithFile:...]而不是使用紋理? – Gargo