【发布时间】:2014-10-08 20:37:23
【问题描述】:
在我的游戏中,我有这个代码。它渲染一个用作按钮的纹理:
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()放入渲染方法中?这基本上是在每秒大约 60 次创建一个新纹理、新舞台(没有正确处理它)、新图像和一个新 ClickListener? -
抱歉我的代码不好,我三个月前才学java。我将如何只渲染一次?
-
Libgdx 并不是学习 java 的最佳起点。如果您的意思是您认为您知道(并且理解)足够的 java 以进入 libgdx,那么我建议您查看the tutorials 之一,以便您确定了解lifecycle .但是,正如前面所说,强烈建议您至少了解 java、oop(尤其是 gc)的基本知识。
标签: java memory memory-management memory-leaks libgdx