我在我的應用程序中有一個背景,但點擊一個按鈕應該改變它並使用一個不同的。在運行時切換cocos2d視網膜顯示背景。
我無法將它們全部添加到sharedTextureCache中,因爲每個緩存中的大小都大於16MB,並且我擁有30個不同的背景。
沒有加載時間切換背景的最佳方式是什麼?我不希望用戶在點擊該按鈕時等待。
感謝
我在我的應用程序中有一個背景,但點擊一個按鈕應該改變它並使用一個不同的。在運行時切換cocos2d視網膜顯示背景。
我無法將它們全部添加到sharedTextureCache中,因爲每個緩存中的大小都大於16MB,並且我擁有30個不同的背景。
沒有加載時間切換背景的最佳方式是什麼?我不希望用戶在點擊該按鈕時等待。
感謝
我設法不減慢應用是這一行的唯一方法:
[_background setTexture: [[CCTexture2D alloc] initWithImage:...]]
當我嘗試使用共享紋理緩存,即使不同步,則應用慢下來。 :-O
如果你知道將顯示接下來,你可以事先預裝它是什麼背景。每個視網膜設備可以使用大約100兆字節的內存(大約5張spritesheets 2048x2048)。在這種情況下,您開始收到內存警告,但應用程序將穩定運行。所有預加載可以異步共享紋理緩存。通過調用
[[CCTextureCache sharedTextureCache] removeUnusedTextures];
可以強制卸載非平常紋理,請不要忘記清理未使用的紋理。
刪除所有未使用的數據。或紋理...
[[CCDirector sharedDirector] purgeCachedData];
[[CCTextureCache sharedTextureCache] removeAllTextures];
[CCTextureCache purgeSharedTextureCache];
[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFrames];
[CCSpriteFrameCache purgeSharedSpriteFrameCache];
是的,這就是我正在做的事情,但異步預加載消耗時間,其餘應用程序不響應,直到這些異步調用完全結束。這是我的主要問題。我想要做的是,當用戶點擊按鈕時,一些新的背景會異步添加到緩存中,但是應用會非常緩慢地添加到緩存中。 – nano
很奇怪......你確定你使用'addImageAsync:target:selector:'在後臺加載你的圖片嗎? – Morion
我知道,使用addImageAsync在主線程中添加4個背景(2048 x 2048 @ 32 bpp => 16384 KB)會降低應用程序的性能,直到完全添加爲止。 :( – nano