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

Java LibGDX-调用TiledMapRenderer.render()时应用程序崩溃,java,android,2d,render,libgdx,Java,Android,2d,Render,Libgdx,以下是启动桌面版本时得到的信息: @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.combi

以下是启动桌面版本时得到的信息:

@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();
}
我尝试了和,但在同一行
mLevel.getTiledMapRenderer().render(tmp.x,tmp.y,camera.viewportWidth,camera.viewportHeight)上得到了相同的错误

编辑:我刚刚注意到我的.tmx文件的数据是由平铺贴图编辑器自动编码的,所以我只是取消了它的激活,但仍然得到相同的错误。
如果我复制/粘贴(我指的是整个项目,不仅仅是render()方法),它会工作,但当我尝试在自己的项目中加载自己的贴图时,它会崩溃…

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

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)
还是很疯狂…

如果有人能提供一些帮助,我将不胜感激,因为我真的快发疯了

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

目前我的屏幕是黑色的,所以我认为没有绘制平铺(可能是因为我在packfile中为平铺提供了随机索引-已修复,请参见文章的结尾),但没有引发异常,这就是重点

这些错误都是由于我使用的程序打包了本来应该让我赢得时间lol的磁砖。所以我将尝试不同的选项或使用其他东西。
如果您想知道该程序是“TexturePacker GUI”v3.1.0。

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

编辑:找到了一个有用且有效的瓦片打包工具,在这里:(链接已失效;请使用此工具=>或其他打包工具=>)

要使用它,请打开cmd并转到下载.jar文件的目录,然后:

mHelper.getCamera().update();
mHelper.render();
以下是我提到的dpk教程,请从这里开始:

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


快乐地图:)

当我弄乱了网格定义(忘记加载垂直或将长度设置为零)时,我也看到了类似的异常。因此,您的平铺贴图定义很可能不正确。检查是否有您未满足的尺寸/比例要求(如2的幂或最小X,或类似要求)。谢谢您的回答。我刚刚检查了所有的东西,如果是2的幂:相机的视口,每个瓷砖的大小和我的level.png的大小,其中包含了一个图像中的所有瓷砖。只有贴图大小不合适,但更改它并不能解决我的问题,无论如何,教程使用60*15的贴图,因此显示的贴图也不合适。我还使用了“TexturePacker GUI”,遇到了同样的问题。感谢您提供的替代方案@tsukimi通过发布我的zip上传了链接。我不确定这是否是一个好的,因为我有几个打包机,所以请告诉我这是否像我在帖子中所说的那样有效。@miNde谢谢上传。这和我现在使用的程序一样。问题是它的打包方式,它从左下向上打包,当平铺编辑器需要从左上到右打包图像时,您在打包文件中使用过平铺吗?现在,在平铺中,来自包文件的索引不匹配。我只做了很差的测试,是的,它工作正常。但问题是,自从我写这篇文章以来,我一直忙于其他事情,所以我没有机会经常使用它。无论如何,我在我的HD中找到了另一个瓦片包装器,所以如果你愿意,我可以上传它。@tsukimi我在我的答案中添加了链接。
//You should create, in the same directory of the .jar file, two additionnal folders
//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