2013-08-28 47 views
1

我正在測試我的遊戲並遇到了問題。我的主要遊戲類是在用戶死亡時重新啓動(而不是整個應用程序),但每當它重新啓動時,它就會運行得越來越慢。我正在考慮可能的內存泄漏。Libgdx遊戲重啓時速度越來越慢

我使用setScreen(Screen sc)方法從屏幕切換到屏幕。我也在清理dispose()方法,我找不到原因。

所以我問你也許指向我在任何方向可能導致我的應用程序在重新啓動時放慢速度?

它可能是ShapeRenderer,因爲我在循環中渲染大量的形狀 - 也許這就是問題所在?但是這款應用完美無缺,我稱之爲主遊戲類的新實例。

有太多的代碼發佈它,所以我很抱歉大量的文字。我真的希望你能以某種方式指出我的錯誤!

+0

發佈與玩家在某處死去或將整個事情上傳到github時發生的事情相關的代碼。兩種可能性,無論是你引入了memoryleak還是libgdx,我們都無法知道沒有代碼。 – arynaq

+0

其中一個原因可以是靜態變量。因爲班級仍然在內存中加載時,你關閉應用程序,但還沒有殺死它 –

+0

你在遊戲中使用方塊2d –

回答

4

東西可能會幫助你。 使用jmap(http://docs.oracle.com/javase/7/docs/technotes/tools/share/jmap.html)。 jmap顯示jvm當前擁有哪些對象實例。只需製作一個可運行的遊戲jar,啓動遊戲,檢查jmap,死掉一點,然後再次檢查jmap。也許你看到紋理對象的增加,因此你可能沒有清理其中的一些(如果你使用AssetManager,很容易忘記一些)。

+0

我試過eclipse中的內存分析器,但是我的內存消耗顯然不是很高,幾乎不到10-20mb。這真的很奇怪,因爲遊戲的速度非常隨機。即使有時候在玩完之後(當我可以期待緩慢的表現時),它突然開始工作得非常順利。如果我告訴你我注意到FPS隨機變化,它會有所幫助嗎? – user2685747

+0

我只是看着你的代碼,雖然你的Kurve類代碼似乎正確地處理了所有的資源,但你的ScoreScreen類並沒有處理它的紋理或spritebatch。我運行了程序(添加了一些隨機紋理後)),並使用fps-logger顯示fps,它運行在60幀左右,屏幕變化時幾乎沒有下降。 – Nozdrum

4

如果你看看ScoreScreen你會看到,你是不是配置的紋理加載的。

我強烈建議你看看Asset Manager關於libgdx的教程和指南,以避免將來出現這種情況。

編輯:

側面說明,你的代碼是不是壞的,所以不要被它感到羞恥。事實上,我會說它比平均水平好:)。

+0

我學習數學,我爲這一個而感到羞愧,對於你所有的時間感到抱歉,我幾乎搞砸了一個非常基本的代數公式,它似乎,但從來沒有想過我可能是錯的。我真的很抱歉,但感謝我今天被迫瞭解遇到內存泄漏!歡呼 – user2685747

+0

+1以供AssetManager使用 –