【发布时间】:2012-07-29 01:28:00
【问题描述】:
@Override
public void render(float delta) {
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
camera.update();
sprite.setProjectionMatrix(camera.combined);
mLevel.getTiledMapRenderer().getProjectionMatrix().set(camera.combined);
Vector3 tmp = new Vector3();
tmp.set(0, 0, 0);
camera.unproject(tmp);
mLevel.getTiledMapRenderer().render(tmp.x, tmp.y, camera.viewportWidth, camera.viewportHeight);
sprite.begin();
...
sprite.end();
}
这是我在启动桌面版时得到的:
Exception in thread "LWJGL Application" java.lang.IllegalArgumentException: Number of remaining buffer elements is 0, must be at least 1. Because at most 1 elements can be returned, a buffer with at least 1 elements is required, regardless of actual returned element count
at org.lwjgl.BufferChecks.throwBufferSizeException(BufferChecks.java:162)
at org.lwjgl.BufferChecks.checkBufferSize(BufferChecks.java:189)
at org.lwjgl.BufferChecks.checkBuffer(BufferChecks.java:230)
at org.lwjgl.opengl.GL15.glBufferData(GL15.java:141)
at com.badlogic.gdx.backends.lwjgl.LwjglGL20.glBufferData(LwjglGL20.java:93)
at com.badlogic.gdx.graphics.glutils.VertexBufferObject.bind(VertexBufferObject.java:208)
at com.badlogic.gdx.graphics.Mesh.bind(Mesh.java:268)
at com.badlogic.gdx.graphics.g2d.SpriteCache.begin(SpriteCache.java:868)
at com.badlogic.gdx.graphics.g2d.tiled.TileMapRenderer.render(TileMapRenderer.java:336)
at com.badlogic.gdx.graphics.g2d.tiled.TileMapRenderer.render(TileMapRenderer.java:286)
at com.crunsh.libgdx.screens.GameScreen.render(GameScreen.java:102)
at com.badlogic.gdx.Game.render(Game.java:46)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:202)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:131)
this tuto 和 this one 我都试过了,我在同一行 mLevel.getTiledMapRenderer().render(tmp.x, tmp.y, camera.viewportWidth, camera.viewportHeight); 得到了同样的错误。
编辑:我刚刚注意到我的 .tmx 文件的数据是由 Tiled Map Editor 自动编码的,所以我只是将其停用,但仍然出现同样的错误。
如果我复制/粘贴 this project(我的意思是整个项目,不仅是 render() 方法)它可以工作,但是当我尝试在我自己的项目中加载我自己的地图时它只会崩溃...
所以在那之后我决定简化我的render()方法,就像我之前提供的链接一样,使用作者提供的TiledMapHelper class,所以现在有我的render()方法:
mHelper.getCamera().update();
mHelper.render();
仍然崩溃iiiiiiiiiiiiiiingg.....
如果有人可以请提供一些帮助,将不胜感激,因为 atm 我真的要疯了!
【问题讨论】:
-
当我弄乱了我的网格定义(忘记加载顶点或将长度设置为零)时,我看到了类似的异常。因此,您的平铺地图定义很可能有问题。检查是否有您不满足的尺寸/比例要求(例如 2 的幂或 X 的最小值,或类似的东西)。
-
感谢您的回答。我刚刚检查了所有是否为 2 的幂:相机的视口、每个图块的大小以及我的 level.png 的大小,其中包含打包在一个图像中的所有图块。只有地图大小不合适,但改变它并没有解决我的问题,反正教程使用的是 60*15 的地图,所以显示的地图也不适合。
标签: java android 2d render libgdx