gpt4 book ai didi

java - LibGdx屏幕: render and lifecycle

转载 作者:行者123 更新时间:2023-12-01 11:21:25 25 4
gpt4 key购买 nike

我有一个问题,我认为它与屏幕渲染及其生命周期有关。基本上我有两个屏幕(菜单和游戏)。在 GameScreen 渲染方法中,我调用 World.update,然后调用我的 Render。在(GameScreen 的)隐藏方法中,我处理了 Redner 类中的 SpriteBatch。

因此,当我将屏幕从游戏更改为菜单(在 World.update 内)时,Java 崩溃。据我所知,处置正在导致崩溃。所以我的问题是,当我在渲染周期中间设置一个新屏幕时,该渲染周期是否仍会以其旧屏幕结束?意思是,我是否在渲染完成之前调用了batch.dispose,这就是我遇到问题的原因?

谢谢大家的帮助

public class GameScreen extends AbstractGameScreen {
private static final String TAG = GameScreen.class.getName();

private WorldController worldController;
private WorldRenderer worldRenderer;

private boolean paused;

public GameScreen(Game game) {
super(game);
}

@Override
public void render(float deltaTime) {
// Do not update game world when paused
if (!paused) {
// Update game world by the time that has passed since last render time
worldController.update(deltaTime);
}
// Sets the clear screen color to: Cornflower Blue
Gdx.gl.glClearColor(0x64 / 255.0f, 0x95 / 255.0f, 0xed / 255.0f, 0xff / 255.0f);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
// Render game world to screen
worldRenderer.render();
}

@Override
public void resize(int width, int height) {
worldRenderer.resize(width, height);
}

@Override
public void show() { // Similar as create method
worldController = new WorldController(game);
worldRenderer = new WorldRenderer(worldController);
Gdx.input.setCatchBackKey(true);
}

@Override
public void hide() { // Similar to dispose method
worldRenderer.dispose();
Gdx.input.setCatchBackKey(false);
}

@Override
public void pause() {
paused = true;
}

@Override
public void resume() {
super.resume();
// Only called on Android
paused = false;
}
}

最佳答案

这基本上是正确的。调用setScreen的屏幕从其内部 render方法将有 hide调用自身,然后继续执行 render 中的其余代码。方法。所以你在尝试用它绘制之前就杀死了你的 Sprite 批处理。

所以不要打电话dispose从你的hide内部方法。事实上,屏幕调用 dispose 可能是不好的做法。就其本身而言。您可以将其保留给拥有它的 Game 类。例如,您可以在游戏类中执行以下操作:

@Override
public void render() {
super.render();
if (getScreen() != gameScreen && gameScreen != null) {
gameScreen.dispose();
gameScreen = null;
}
}

顺便说一句,您可能应该将 SpriteBatch 放入您的 Game 子类中,并让所有不同的屏幕共享它。这是一个相当大的对象,需要无缘无故地分配和释放。

关于java - LibGdx屏幕: render and lifecycle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31181752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com