2012-12-17 44 views
0

現在寫,我使用cocos2d創建一個交互式電子書。當程序運行時,只有在初始加載時,封面動畫纔會起伏不定。這個動畫在封面上,它很大。我們正在談13個紋理地圖集,26個圖像。第一次加載時的動作/慢動作cocos2d

我知道這個問題源於預加載/加載圖像,但是我已經在動畫發生之前加載了所有圖像。

-(id) init { 
    if((self=[super init])) { 
       isTouchEnabled_=YES; 
    //Pg0 Animations 
    [[CCSpriteFrameCache sharedSpriteFrameCache]addSpriteFramesWithFile:@"CB0A0.plist"]; 
    [[CCSpriteFrameCache sharedSpriteFrameCache]addSpriteFramesWithFile:@"CB0A1.plist"]; 
    ...etc.}} 

本書整體設置如下。我構建一個場景,一個菜單層,然後菜單層推送並彈出不同的圖層/不同的頁面。

當封面被加載(Pg0)時,如果用戶觸摸圖片,它將貫穿動畫。然後,當用戶再次觸摸該圖片時,將運行第二個動畫。

本書的所有圖像都加載在菜單圖層中(所以在任何頁面壓入或彈出之前)。我試過在場景或單個頁面上加載這些圖像來加速過程,但這不會影響時間。

我正在通過動畫助手運行我的動畫,該動畫助手爲我循環顯示圖像。

任何幫助都會很棒,如果需要,我很樂意分享更多關於該項目的代碼或信息。

+0

我想出了我做錯了什麼!如果您有使用來自兩個不同紋理文件的圖像的動畫,則假設您尚未預加載特定紋理,則會暫停加載新紋理。只需編寫一行代碼,如'[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@「yourTexture.plist」];'不會加載紋理緩存。您必須調用動畫所在緩存的特定圖像並將其添加到圖層中。爲此,我簡單地添加了所有動畫紋理的精靈,並將它們隱藏起來。 –

回答

0

檢查您的AppDelegate是否實現了內存警告方法。檢查該方法的作用。

默認情況下,cocos2d實現該方法並清除所有緩存。現在,當預加載紋理時觸發它時,發生的情況是,cocos2d刪除了預加載的紋理,因爲收到了內存警告,但這些預加載的紋理尚未使用。 Cocos2d認爲它們是「未使用」並將它們從內存中移除。這意味着下次使用該紋理時,需要從磁盤再次加載。

我寫了一篇博客文章where I describe this issue, and ways to solve it。最重要的是:獲得TexturePacker並且只使用.pvr.ccz作爲紋理圖集。儘可能將紋理顏色深度降低到16位。並且一定要轉儲紋理內存使用情況以瞭解您實際使用的內存量以及該內存量是否在合理範圍內。包括可能支持的內存較少的舊設備。

+0

我實際上已經在大多數優化(yay)--16位,紋理打包器,.pvr.ccz等方面遵循了您的書。但是,我不知道紋理壓縮,我一定會實現,但是我讀過你的博客文章描述了迄今爲止的最佳實踐。如果我找到其他東西,會保持更新。謝謝! –

1

有同樣的問題。當使用cocos2d v0.9動畫確定,沒有滯後。遷移到cocos2d v2.0時出現延遲。當在cocos2d v0.9中添加精靈(addSpriteFramesWithFile:(NSString *)plist)時,也會創建texture2d(CCSpriteFrameCache.m:238),在cocos2d v2.0中沒有創建textture2,創建了紋理首先使用CCSpriteFrame。我在CCSpriteFrameCache.m加入

[[CCTextureCache sharedTextureCache] addImage:textureFileName]; 

修復:207(V2.0)

1

我只是遇到了在cocos2d 3.1版iphone這個問題。我有緩存但仍然在加載口吃的spritesheets。我在另一篇文章中發現,你需要加載紋理本身,以擺脫最初的滯後。這是我在我的緩存精靈方法做:

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"spritesheet.plist"]; 
CCTexture *temporaryLoadTexture = [CCTexture textureWithFile:@"spritesheet.png"]; 

只需通過加載虛擬CCTexture文件,即擺脫了所有的第一次動畫和精靈滯後。希望這可以幫助!