你好,我正在制定一个游戏,我想知道如何处置资源,因为我遇到了内存问题。
我有这样的想法:
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
被称为。以前我把屏幕调整到 MapScree
. 仍然是的渲染方法 splashScreenInstance
调用时,我收到空指针异常。为什么会这样?
我希望一旦我设置了另一个屏幕,上一个屏幕就不再呈现了。这似乎并非如此。我曾经尝试过在使用游戏示例设置屏幕之后,在我想要处理的屏幕上调用hide方法之后,以及在下一个屏幕的show方法上进行处理。所有这些情况在呈现当前屏幕之前仍会呈现前一个屏幕几次。
我真的需要恢复内存,而且我不想每次(在render方法上)都测试空指针,因为这会影响性能。
有什么建议吗?
谢谢
2条答案
按热度按时间envsm3lx1#
你在哪打电话
setScreen
? 因为所有的事情都应该发生在呈现线程中(甚至是inputlisteners),所以您应该能够调用setScreen
在你的第一次Screen
然后从render方法返回。这个Game
示例将自动调用hide
在你第一次Screen
那是你可以打电话的地方dispose
.gijlo24d2#
我通常是这样处理这个问题的:
我先把新的
Screen
,那么dispose()
然后立即停止当前屏幕的任何进一步执行return
. 这样,应停止当前渲染周期,并在下一个周期中render()
你的下一个屏幕将被调用。另一种方法可能是
dispose()
在你的hide()
方法Screens
,因为这将是在Game
将使用下一个屏幕。当可能有几个不同的下一个屏幕时,这尤其有用。在这种情况下,仍然只有一个地方dispose()
那将是在hide()
方法。