2013-07-20 22 views
0

我有一個MainMenuScene和GameScene ...cocos2d的FPS下降時ReplacingScene但場景不會保留,它與ARC

在MainMenu的我有按鈕啓動轉到GameScene中的中間遊戲我想重新啓動或者退出遊戲,這是我做的兩個遊戲中的一個,當我將GameScene替換爲另一個GameScene,或者只是返回到主菜單,然後再次返回到新的GameScene時,FPS開始丟棄和丟棄,如果我這樣做的週期1次FPS從60下降到30,如果我再次做到這一點FPS下降到15,依此類推......

我相信問題是內存泄漏因爲我離開了現場......但它沒有我已經檢查和檢查過,並且沒有任何地方強烈地提及該場景,並且還啓用了ARC,我使用了儀器配置文件進行了檢查,根據Xcode儀器沒有任何內存泄漏。

有沒有人有這個問題......或任何人有任何想法我可能會做錯什麼?根據我在CCDirector的ReplaceScene方法中讀到的那個場景被破壞並被新的替換,所以應該沒有問題。

== 忘了提: 我有GameLayer和GameScene在辛格爾頓的弱引用,但是當我更換了現場,立即在那之後我設置的2爲零,即使我不應該因爲他們是弱引用,但我爲了以防萬一。更多的情況下

添加圖片: Dealloc Debug

看上面的圖片可以看到,每一個ReplaceScene從CCDirector被調用時,場景,特別是GameScenes,越來越釋放。所以內存泄漏不是問題,但它看起來像場景沒有被破壞,或者我的想法是這樣,因爲FPS每次都會一直下降和下降。

1st GameScene scene will be replaced with Main Menu

MainMenuScene After ReplaceScene from GameScene

2nd GameScene Scene Replaced from MainMenuScene

2nd MainMenuScene after ReplaceScene from GameScene ......很少replacescenes後...

7th GameScene scene replaced from MainMenuScene

這裏奇怪的是,MainMenu的是不拜因g受影響的AT ALL,渲染時間是相同的......繪製調用是相同的(這是可以理解的,即使在GameScene中drawCalls保持不變),但在GameScene中FPS不斷下降,渲染時間爲變得巨大,這就是爲什麼遊戲變得非常慢。

將繼續檢查。

+0

現場的dealloc方法運行嗎?如果沒有,它正在泄漏。最常見的原因是保留週期,即一個節點對父節點或兄弟節點持有強引用。 – LearnCocos2D

+0

事情是,它與ARC,所以dealloc它沒有被稱爲...和我不能實現方法時,它與ARC。 我檢查了Xcode Profile Instruments,並且沒有註冊內存泄漏。 –

+0

@ LearnCocos2D我的不好...我剛纔檢查它是釋放對象。 我有一張圖片,我想上傳,告訴你這個斷點......但如果它釋放,那麼發生了什麼?爲什麼我的FPS下降?您是否正在設備上測試 –

回答

0

解決方案非常簡單......除了batchnode,一個特定的batchnode正在處理背景,所有東西都被正確釋放,導致我的應用性能下降。

因此,對於任何人,請記得檢查您的CCBatchNodes和任何其他強大的參考連接到現場時,更換場景的時刻。取消分配幾乎立即發生,但它有助於設置爲釋放父對象的零子對象。但在我的情況下,SpriteBatchnode是影響我的FPS的因素之一,提高了時間表現。

感謝LearnCocos2D您的幫助是非常感謝。