2012-09-23 71 views
0

n't我的遊戲場景是使用replaceScene運行的,並且水平編號被傳入。遊戲層從plist中加載數據,然後創建對象在世界空間(CCSprite子類與box2d正文)。當水平被播放時,英雄角色保持在屏幕的中央 - 我調整圖層位置以便根據移動速度與圖層縮放一起進行放大和縮小。Cocos2d運行時遊戲層不平滑,替換後場景平滑

例如:

CGPoint layerPosition = ccp(((screenSize.width/2) - ourHero.position.x) * sceneScale, ((screenSize.height/2) - ourHero.position.y) * sceneScale); 
[self setPosition:layerPosition]; 
[self setScale:sceneScale]; 

的問題是,在第一次運行水平運動往往可以幹當速度增加並且層縮小(不只是在開始的幾秒鐘)。但是,如果用戶重新啓動級別(按鈕執行replaceScene),則替換級別的移動即使在速度下也非常平滑。

我正在使用batchnode並將sprite圖像存儲在幀緩存中。我曾嘗試設置幀緩存並在級別選擇場景中預加載聲音,但這沒有任何區別。我有事件嘗試清除級別之間的緩存,看看我是否可以使重新啓動的級別表現出相同的行爲,但沒有做任何事情。

任何人都可以提出什麼可能會導致這種情況,我可能會消除它。

謝謝!

+0

當然,第一次加載遊戲場景時,它會變慢,因爲所有的對象都必須創建,而第二次只需要創建一些東西。無論如何,我推薦使用Time Profiler並查看造成滯後的原因。從它的聲音,你正在做一切正確的方式,所以讓樂器說話。 –

+0

感謝您的回覆 - 在CCNode Vist上花費58%(CCSpriteBatchNode訪問中佔44%),EAGLView swapBuffers上花費29%,CCScheduler花哨上花費約1.9%。 – TinoK

+0

奇怪的是,生澀的運動在整個關卡的第一個遊戲中持續存在 - 當然,所有的物體都會在某個時刻創建出來,然後這個匆忙會消退。再次感謝任何和所有的反饋! – TinoK

回答

0

更多鈔票溶液:

加載所有的紋理和子畫面片在初始化/的OnEnter。如果無法一次加載所有內容,則使用線程加載。對於音頻/音樂,您可以在聲音引擎中使用preLoad調用。

Here s my thread。我也面臨同樣的問題。最後通過使用單獨的線程進行加載解決。

+1

感謝您提供的解決方案。我可以問,您觀察到的行爲是否繼續進行整個級別的運行(無限期地),還是在異步加載完成後停止?我問,因爲我事先加載所有的紋理和音頻(級初始化) - 它第一次運行圖層場景時仍然生澀。 – TinoK

+0

使用runAction的cocos2D動畫在理想情況下首次需要時間。嘗試在你的情況下確認。嘗試初始化init中的所有cocos2D動作並使用runAction調用播放一次(可能在屏幕外)。在其中一款遊戲中,我也只是在第一次遇到動畫時才生澀......然後將動畫初始化移至init。嘗試在init中播放一次,然後停止... – Guru