Java 什么';这是处理libgdx屏幕的正确位置
您好,我正在制作一个游戏,我想知道如何处理资源,因为我遇到了内存问题 我有这样的想法:Java 什么';这是处理libgdx屏幕的正确位置,java,libgdx,Java,Libgdx,您好,我正在制作一个游戏,我想知道如何处理资源,因为我遇到了内存问题 我有这样的想法: public SplashScreen implements Screen { @Override public void render(float delta) { } @Override public void dispose() { if (batch != null) batch.dispose(); ba
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
的render方法,我收到了空指针异常。为什么会这样
我希望,一旦我设置了另一个屏幕,上一个屏幕将不再渲染。事实似乎并非如此。我尝试在使用游戏实例设置屏幕之后立即进行处理,在要处理的屏幕上调用hide方法之后,最后在下一个屏幕的show方法上进行处理。所有这些情况都会在渲染当前屏幕之前渲染上一个屏幕几次
我真的需要恢复内存,而且我不想每次(在render方法上)都测试空指针,因为这会影响性能
有什么建议吗
谢谢我通常是这样处理这个问题的:
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;
}
}
我首先设置新的屏幕
,然后将dispose()
设置为当前屏幕,然后通过return
立即停止当前屏幕的任何进一步执行。这样,应停止当前渲染周期,并在下一个周期中调用下一个屏幕的render()
另一种方法可能是在
屏幕
的hide()
方法中调用dispose()
,因为这将是游戏
使用下一个屏幕之前调用的最后一个方法。当可能有几个不同的下一个屏幕时,这尤其有用。在这种情况下,仍然只有一个dispose()
位置,该位置将位于hide()
方法中。您在哪里调用setScreen
?由于所有事情都应该发生在渲染线程中(甚至是InputListeners),因此您应该能够在第一个屏幕中调用设置屏幕
,然后从渲染方法返回。Game
实例将在第一个屏幕上自动调用hide
,在那里您可以调用dispose
,谢谢,没有人,是的,但是这样您仍然需要在渲染方法中加入一些逻辑。该逻辑将被称为每个FPS。实际上我有类似的东西,检查空指针,然后进行渲染,但渲染内部仍然有逻辑。。。如果我能避免这种情况,我会很高兴的。你需要在渲染方法中加入一些逻辑,因为如果不是从渲染方法切换屏幕,你还怎么切换屏幕?此外,该逻辑不会导致FPS减少。可能是0.0000001 FPS或者在这个范围内。谢谢你,我使用的是一个监听器,因此错过了一个干净的返回。我将重写以处理返回。有时我调用render,有时调用applicationlistener。也许我会处理一个布尔值,以避免在处理时渲染。无论如何,谢谢你的提示。我要去考试。