你好,我正在开发一款游戏,我想知道如何处理资源,因为我遇到了内存问题。
我有这样的东西:
public SplashScreen implements Screen {
@Override
public void render(float delta) {
}
@Override
public void dispose() {
if (batch != null)
batch.dispose();
batch = null;
}
}
public MapScreen implements Screen {
@Override
public void render(float delta) {
}
@Override
public void show() {
splashScreenInstance.dispose();
}
@Override
public void dispose() {
if (mesh != null)
mesh.dispose();
mesh = null;
}
}
我会在 MapScreen
的 show 方法被调用时立即处理初始屏幕。之前我将屏幕设置到 MapScree
。仍然调用了 splashScreenInstance
的渲染方法,我收到了空指针异常。为什么会这样?
我希望一旦我设置了另一个屏幕,就不再呈现前一个屏幕。事实并非如此。我尝试在使用游戏实例设置屏幕后立即进行处理,在我要处理的屏幕上调用 hide 方法后立即处理,最后在下一个屏幕的显示方法上进行处理。所有这些情况在渲染当前屏幕之前仍然会渲染前一个屏幕几次。
我真的需要恢复内存,而且我不想每次(在渲染方法上)测试空指针,因为这会降低性能。
有什么建议吗?
谢谢
最佳答案
我通常是这样处理这个问题的:
public SplashScreen implements Screen {
@Override
public void render(float delta) {
// I assume that you have a reference to the game somewhere to switch the screen
game.setScreen(new MapScreen());
dispose();
return;
}
}
我首先设置新的 Screen
,然后 dispose()
当前的,然后通过 return
立即停止当前屏幕的任何进一步执行>。这样当前的渲染周期应该停止,在下一个周期中将调用下一个屏幕的 render()
。
另一种方法可能是在 Screens
的 hide()
方法中调用 dispose()
,因为那将是Game
之前调用的最后一个方法将使用下一个屏幕。当可能有几个不同的下一个屏幕时,这尤其有用。在这种情况下,dispose()
仍然只有一个位置,并且在 hide()
方法中。
关于java - 放置 libgdx 屏幕的正确位置是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22332601/