gpt4 book ai didi

java - 处置 OrthagonalTiledMapRenderer 时出错

转载 作者:太空宇宙 更新时间:2023-11-04 06:29:58 27 4
gpt4 key购买 nike

我在处理屏幕时遇到问题。当我尝试处置 OrthogonalTiledMapRenderer 时,收到此错误消息。我在网上查了一下,没有发现任何其他这样的例子或发生这种情况的情况。

Exception in thread "LWJGL Application" java.lang.IllegalArgumentException: buffer not allocated with newUnsafeByteBuffer or already disposed
at com.badlogic.gdx.utils.BufferUtils.disposeUnsafeByteBuffer(BufferUtils.java:507)
at com.badlogic.gdx.graphics.glutils.VertexArray.dispose(VertexArray.java:67)
at com.badlogic.gdx.graphics.Mesh.dispose(Mesh.java:551)
at com.badlogic.gdx.graphics.g2d.SpriteBatch.dispose(SpriteBatch.java:944)
at com.badlogic.gdx.maps.tiled.renderers.BatchTiledMapRenderer.dispose(BatchTiledMapRenderer.java:152)
at org.shawnhenry.rollypauly.screens.GameScreen.dispose(GameScreen.java:264)
at org.shawnhenry.rollypauly.screens.GameScreen.hide(GameScreen.java:238)
at org.shawnhenry.rollypauly.InputHandler.doTap(InputHandler.java:147)
at org.shawnhenry.rollypauly.InputHandler.touchUp(InputHandler.java:117)
at com.badlogic.gdx.backends.lwjgl.LwjglInput.processEvents(LwjglInput.java:305)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:199)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:114)

我的实现非常简单。

在我的主要方法中,我初始化渲染器:

renderer = new OrthogonalTiledMapRenderer(world.getTiledMap());

渲染方法调用渲染器来绘制对象,例如:

renderer.render(backgroundLayers);

renderer.getSpriteBatch().draw(resume, world.getResumeButton().x, world.getResumeButton().y, world.getResumeButton().width, world.getResumeButton().height);

这是错误消息中提到的各种类/函数的跟踪:

来自“输入处理程序”

if(mainMenu.contains(x, y)){//Tapped the mainMenu button.
//Gdx.app.log("InputHandler", "Hit menu button!");
gameScreen.getGame().setScreen(new LevelSelectScreen(gameScreen.getGame()));
gameScreen.hide();
}

来自“游戏屏幕”

@Override
public void hide() {
dispose();

}

@Override
public void dispose() {
renderer.dispose();
//world.dispose();
}

您能给我的任何帮助都会很棒。如果我处理我的世界级,而不是渲染器,我不会收到错误。我担心的是,我相信渲染器是一个资源密集型对象,因此在离开屏幕时需要将其丢弃。

最佳答案

我相信解决了我的问题。我认为我调用了两次 dispose,但我查看了整个代码,唯一调用 dispose() 的地方是 hide() 期间的一次,而 hide() 在此期间仅被调用一次:

if(mainMenu.contains(x, y)){//Tapped the mainMenu button.
//Gdx.app.log("InputHandler", "Hit menu button!");
gameScreen.getGame().setScreen(new LevelSelectScreen(gameScreen.getGame()));
gameScreen.hide();
}

我认为我的问题是,当我将新屏幕设置为 LevelSelectScreen() 时,随着 LevelSelectScreen() 获得焦点,hide() 函数会自动调用...dispose() 第一次被调用。然后,当我显式调用它时,它会在下一行再次调用 gameScreen.hide()'

关于java - 处置 OrthagonalTiledMapRenderer 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26248510/

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