2012-03-26 71 views
1

我這種方式加載我的動畫人物與一個巨大的質地:釋放所有紋理內存

​​

後來,當我不再使用的文字,我使用釋放內存:

[[CCSpriteFrameCache sharedSpriteFrameCache]removeSpriteFramesFromFile:@"MyFile.plist"]; 

還有:

[[CCTextureCache sharedTextureCache]removeTextureForKey:@"MyFile.png"]; 

只是可以肯定的。

我這樣做是因爲它使用的紋理消耗了大量內存,所以我確保將其處理掉,這樣我的應用程序不會崩潰。 上述代碼是否正確?

無論如何,這是實際的問題:我最終再次加載我的角色,並再次處置它。最終,在一對夫婦復活並殺死之後,該應用程序崩潰。日誌中沒有提到它,所以我可以懷疑它是由於記憶 - 這就是爲什麼我認爲我沒有正確處理紋理。

我確實需要創建和處理角色的紋理。我不能在遊戲中預裝它。

回答

4

我通常使用蠻力方法如下:

[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames]; 
    [[CCTextureCache sharedTextureCache] removeUnusedTextures]; 

在遊戲流程中有具體的時刻。在宏偉的計劃中,可可掃描陣列並不是太昂貴。就你的情況而言,在我目前的比賽中我必須加載並溝渠。 CCTextureCache有CCLOG'ing,允許您目擊是否刪除實際發生在您期望的或接近它(autorelease有其怪癖)。如果不是,你可能會在某處保留一些紋理的句柄,一個精靈,一個批處理節點,一個CCAnimation或一個動作。

+1

蠻力的方法並不是答案,但你確實指出了一些重要的東西:具有保留的CCAnimation對象的可能性。那麼,事實證明,我已經允許NSMutableArrays將精靈幀添加到它們,然後創建CCAnimations。我從來沒有發佈數組,所以他們一直在堆疊精靈幀內存。謝謝。 – Voldemort 2012-03-26 03:32:18