LibGDX – 调用TiledMapRenderer.render()时应用程序崩溃

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

我已经尝试了这个tuto和这个 ,我在相同的行mLevel.getTiledMapRenderer().render(tmp.x, tmp.y, camera.viewportWidth, camera.viewportHeight);得到了同样的错误mLevel.getTiledMapRenderer().render(tmp.x, tmp.y, camera.viewportWidth, camera.viewportHeight);

编辑:我只是注意到我的.tmx文件的数据是由Tiled Map Editor自动编码的,所以我只是将其停用,但仍然得到相同的错误。
如果我复制/粘贴这个项目 (我的意思是整个项目,不仅是render()方法)它可以工作,但当我尝试在我自己的项目中加载我自己的地图时,它只会崩溃…

所以在那之后我决定简化我的render()方法,就像我之前给出的链接一样,并使用作者提供的TiledMapHelper class ,所以现在有我的render()方法:

 mHelper.getCamera().update(); mHelper.render(); 

仍然崩溃的时候……
如果有人可以提供一些帮助,我将非常感激,因为我真的很生气!

我找到了导致错误的原因:
1)我的“packfile”中的所有tile都有-1作为索引
2)我的“packfile”中的所有图块都与其原始图块文件名相同,但与包含所有图块的.png文件的名称不同。

目前我的屏幕是黑色的,所以我认为没有绘制瓷砖(可能是因为我给包文件中的瓷砖提供了随机索引 – 已修复,请参见post的结尾 )但没有抛出exception,这就是重点。

这些错误是由于我用来打包那些应该让我赢得时间的牌的程序。 所以我会尝试不同的选择或使用别的东西。
如果你想知道程序是“TexturePacker GUI”v3.1.0。

如果您知道我应该/不使用哪些选项来避免错误,请告诉我。

编辑:找到一个有用的和工作的瓷砖包装工具,这里是: http//freigabe.philweb.de/bubblr/texturepacker_edited.jar (链接死了;用这个代替=> http://bit.ly/ 1a831nv或其他包装工具=> http://sofzh.miximages.com/java/Call the first folder ‘input’ and put in all your tiles (rename them level_1.png”, “level_..”) //Call the 2nd folder ‘output’ and leave it empty //Then just type in the command prompt : java -jar nameOfDownloadedJarFile.jar input output level //Then rename the “input1.png” into “level.png”, and “level.pack” into “level packfile” //Open “level packfile” with notepad and change “input1.png” into “level.png” //Then draw your map using “level.png” in TiledMapEditor //Then just follow dpk’ tutorial for rendering the map and it should work

这是我提到的dpk教程,请从这里开始: http ://dpk.net/2011/05/01/libgdx-box2d-tiled-maps-full-working-example-part-1/#p4

如果应用程序没有崩溃但屏幕为黑色,只需增加摄像机视口的宽度和高度。

快乐的映射:)!