在我的遊戲中,我有這段代碼。它呈現一個紋理作爲一個按鈕:呈現紋理導致內存泄漏
private void drawStart(){
startTexture = new Texture(Gdx.files.internal("start.png"));
startTexture.setFilter(TextureFilter.Linear, TextureFilter.Linear);
stageStart = new Stage();
stageStart.clear();
buttonStart = new Image(startTexture);
buttonStart.setX(10);
buttonStart.setY(Gdx.graphics.getHeight()/2.75f);
buttonStart.setWidth(Gdx.graphics.getWidth()/4);
buttonStart.setHeight(Gdx.graphics.getHeight()/4);
Gdx.input.setInputProcessor(stageStart);
buttonStart.addListener(new ClickListener() {
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button)
{
currentState = GameState.RESET;
startTexture.dispose();
stageStart.dispose();
return true;
}
});
stageStart.addActor(buttonStart);
stageStart.draw();
startTexture.dispose();
}
但是,每當我把drawStart();到我的渲染方法中,Java Heap和Native Heap每10秒緩慢增加1。所以,如果用戶在菜單上離開遊戲約5分鐘,遊戲將在他們的手機上崩潰。我已經測試過它,只有在渲染紋理時纔會發生。
我希望能夠解決這個問題。我已經嘗試了一個if語句,說明如果呈現= 0,渲染紋理,然後設置呈現1,但沒有奏效。
爲什麼要把'drawStart()'放到你的渲染方法中?這基本上是創造一個新的紋理,新的階段(沒有正確處理它),新的圖像和一個新的ClickListener每秒60次左右? – Xoppa 2014-10-08 20:53:12
對不起,我的錯誤代碼,我只在3個月前學過java。我將如何去渲染一次? – Ash 2014-10-08 20:59:22
Libgdx不是學習java的最佳開始。如果你的意思是你認爲你知道(並理解)了足夠多的java來採取步驟進入libgdx,那麼我建議看看[教程]之一(https://github.com/libgdx/libgdx/wiki/External-tutorials),以便您確定瞭解[生命週期](https://github.com/libgdx/libgdx/wiki/The-lifecycle)。然而,就像所說的,至少有關java,oop(尤其是gc)的基本知識是強烈推薦的。 – Xoppa 2014-10-08 21:11:33