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

标签 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.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 tutothis one ,我在同一行 mLevel.getTiledMapRenderer().render(tmp.x, tmp.y, camera.viewportWidth, camera.viewportHeight);.

编辑:我刚刚注意到我的 .tmx 文件的数据是由 Tiled Map Editor 自动编码的,所以我只是停用了它,但仍然遇到同样的错误。
如果我复制/粘贴 this project (我指的是整个项目,不仅仅是 render() 方法)它可以工作,但是当我尝试在我自己的项目中加载我自己的 map 时,它就崩溃了......

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

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

还是崩溃iiiiiiiiiiiiingg.....
如果有人可以提供一些帮助,我们将不胜感激,因为 atm 我真的快要疯了!

最佳答案

我找到了导致错误的原因:

  1. 我的“包文件”中的所有图 block 的索引都是 -1
  2. 我的“packfile”中的所有图 block 都与其原始图 block 文件同名,但与包含所有已打包图 block 的 .png 文件不同名。

目前我的屏幕是黑色的,所以我认为没有绘制任何图 block (可能是因为我在包文件中为图 block 提供了随机索引 - 已修复,请参阅帖子结尾)但没有抛出异常这就是重点。

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

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

编辑:找到了一个有用的打包瓷砖的工具,在这里:http://freigabe.philweb.de/bubblr/texturepacker_edited.jar
(链接已失效;请改用 this oneanother packing tool)

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

//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

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

如果应用程序没有崩溃但屏幕是黑色的,只需增加相机视口(viewport)的宽度和高度即可。

快乐的映射:)!

关于java - LibGDX - 应用程序在调用 TiledMapRenderer.render() 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11737426/

相关文章:

c++ - 用字符c++初始化二维数组

c++ - 带有边界数字的算法设计 : Best Way to Represent a 2D Grid,,用 C++ 编写?

java - Neo4j Cypher遍历——通过多种关系类型查找路径

java - 如何将复选框联合到可滚动窗口?

java - Android & Apache 发送和接收多张图片

android - 应用程序替换另一个?

java - 如何更改二维数组中的所有值?

java - 订单 Activity 因空点引用而崩溃

android - 如何修复 "Android SDK Build Tools version (27.0.3) is ignored..."

android - GCC 4.4.3 offsetof 常量表达式错误。我应该如何解决这个问题?