当前位置: 首页 > 面试题库 >

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

申浩广
2023-03-14
问题内容
@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)

我都试过这个政党成员和这一个,我也得到了同样的错误在同一直线上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”中的所有图块均以-1作为其索引
2)我的“ packfile”中的所有图块均具有与原始图块文件名称相同的名称,但与包含所有打包图块的.png文件。

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

这些错误是由于我以前打包程序的程序造成的,该程序应该让我赢得时间大声笑。因此,我将尝试其他选项或使用其他选项。
如果您想知道该程序是“ TexturePacker GUI” v3.1.0。

如果您知道为避免错误我不应该使用的选项,请告诉我。

编辑: 找到了一个有用的打包瓷砖的工作工具,这里是:
http :
//freigabe.philweb.de/bubblr/texturepacker_edited.jar
(链接已死;请改用此== http://bit.ly/ 1a831nv或其他打包工具=>
http://bit.ly/1aLgAFt)

要使用它,请打开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

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

快乐的映射:)!



 类似资料:
  • 我准备在Windows10上开发一个libGDXAndroid应用程序,最新的EclipseMars。2、最新Android SDK和最新版本的libGDX。我将按照此处的设置说明进行操作:项目设置Gradle 在这里: 设置开发环境(Eclipse、Intellij IDEA、NetBeans) 这里呢 渐变与日食 我当我运行我的Android应用程序它崩溃与输出在logcat: 知道我做错了什

  • 问题内容: 当在此应用程序中的iPhone上调用UIActivityViewController时,它可以正常工作,但在iPad上调用时,该应用程序崩溃。下面是我使用的代码: 如您所见,我正在使用SpriteKit Framework在Swift中进行编程,但我不明白为什么应用程序崩溃。 我收到此错误: 我该怎么做才能解决此问题? 问题答案: 在展示之前,添加以下代码行: 这样,视图控制器便知道要

  • 我正在开发一个Android应用程序,它必须从文件中解析文本。 我的解析器中有以下方法。java类: 每当调用缓冲区时,我都会遇到问题。while循环中的readLine()方法。 我传递以下路径信息File对象是: 现在我已经看了堆栈和在线上的许多帖子,以便尝试解决这个问题,并尝试使用一些解决方案,但没有运气。这是我从错误堆栈跟踪中获得的一个片段。 我确信文件的路径是正确的,因为我在调试时检查了

  • 当我运行应用程序时,它工作得很好,但是当我想调试一个变量值时,应用程序就崩溃了。下面是完整的调试日志。我不知道是什么错误来纠正它。你们能帮帮我吗?我读到了一些关于并且我禁用和启用了ADB集成,但没有帮助我。我试图清洁,重建和运行的项目再次和没有帮助我。每次我尝试开始调试时,应用程序都会崩溃。 提前谢谢!!

  • 我尝试了太多东西,但每次按下“计算”(hesapla)按钮后,应用程序都会崩溃。 例如: 我应该写什么/做什么? 有一只原木猫; 通用域名格式。ertugrulguleryuzgmail。sdunothesaplama E/AndroidRuntime:致命异常:主java。lang.NumberFormatException:无效的int:“”在java上。整型。java上的invalidit(

  • 问题是,当我在Google中使用授权运行此代码时,它会立即崩溃: 但是日志中的错误: 2019-06-22 17:55:42.652 29327-23222/?E/AudioSource:在已关闭的AudioSource 2019-06-22 17:55:43.240 2093-2616/?E/TouchFilter:setTouchFilter日志启用参数:0 2019-06-22 17:55: