java - 放置 libgdx 屏幕的正确位置是什么

标签 java libgdx

你好,我正在开发一款游戏,我想知道如何处理资源,因为我遇到了内存问题。

我有这样的东西:

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()

另一种方法可能是在 Screenshide() 方法中调用 dispose(),因为那将是Game 之前调用的最后一个方法将使用下一个屏幕。当可能有几个不同的下一个屏幕时,这尤其有用。在这种情况下,dispose() 仍然只有一个位置,并且在 hide() 方法中。

关于java - 放置 libgdx 屏幕的正确位置是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22332601/

相关文章:

java - 为什么java类不从实现的接口(interface)继承注释?

Java SO_timeout 和 Connection_Timeout 问题 - 如何将 java 客户端与 couchbase 连接的时间设置得更长?

Java代码无法在DNA字符串中找到基因

android gdx 声音性能问题

android - 如何在 Libgdx 中更改 AdMob 方向

java - Spring 集成: Intercept channels Asynchronuously

java - 单击时翻转相对布局

java - 通过拖动在 libGDX 中真实地旋转 3D 模型

java - TextButton 背景上的 NinePatch 渲染问题 (libgdx)

java - 纹理未显示在应用程序中