2012-09-04 51 views
0

我在我的應用程序中有一個背景,但點擊一個按鈕應該改變它並使用一個不同的。在運行時切換cocos2d視網膜顯示背景。

我無法將它們全部添加到sharedTextureCache中,因爲每個緩存中的大小都大於16MB,並且我擁有30個不同的背景。

沒有加載時間切換背景的最佳方式是什麼?我不希望用戶在點擊該按鈕時等待。

感謝

回答

0

我設法不減慢應用是這一行的唯一方法:

[_background setTexture: [[CCTexture2D alloc] initWithImage:...]] 

當我嘗試使用共享紋理緩存,即使不同步,則應用慢下來。 :-O

1

如果你知道將顯示接下來,你可以事先預裝它是什麼背景。每個視網膜設備可以使用大約100兆字節的內存(大約5張spritesheets 2048x2048)。在這種情況下,您開始收到內存警告,但應用程序將穩定運行。所有預加載可以異步共享紋理緩存。通過調用

[[CCTextureCache sharedTextureCache] removeUnusedTextures]; 

可以強制卸載非平常紋理,請不要忘記清理未使用的紋理。

+0

是的,這就是我正在做的事情,但異步預加載消耗時間,其餘應用程序不響應,直到這些異步調用完全結束。這是我的主要問題。我想要做的是,當用戶點擊按鈕時,一些新的背景會異步添加到緩存中,但是應用會非常緩慢地添加到緩存中。 – nano

+0

很奇怪......你確定你使用'addImageAsync:target:selector:'在後臺加載你的圖片嗎? – Morion

+0

我知道,使用addImageAsync在主線程中添加4個背景(2048 x 2048 @ 32 bpp => 16384 KB)會降低應用程序的性能,直到完全添加爲止。 :( – nano

2

刪除所有未使用的數據。或紋理...

[[CCDirector sharedDirector] purgeCachedData]; 
[[CCTextureCache sharedTextureCache] removeAllTextures]; 
[CCTextureCache purgeSharedTextureCache]; 
[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFrames]; 
[CCSpriteFrameCache purgeSharedSpriteFrameCache];