LibGDX - 应用程序崩溃时调用TiledMa prenderer.render() [英] LibGDX - Application crashes when call TiledMapRenderer.render()

查看:323
本文介绍了LibGDX - 应用程序崩溃时调用TiledMa prenderer.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();
}

下面是我所得到的推出桌面版的时候:

Here is what I get when launching the desktop version :

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.getTiledMa prenderer()相同的错误渲染(tmp.x,tmp.y,camera.viewportWidth,camera.viewportHeight);

编辑:我只注意到我的.tmx文件中的数据会自动被连接codeD由瓷砖地图编辑器,所以我只是desactivated,但仍然得到同样的错误 如果我复制/粘贴的这个项目(我指的是整个工程,不仅使()方法),它的工作原理,但是当我尝试加载我自己的地图在我自己的项目,它只是崩溃......

EDIT : I just noticed that the data of my .tmx file was automatically encoded by Tiled Map Editor, so I just desactivated it, but still get the same error.
If I copy/paste this project (I mean the whole project, not only the render() method) it works but when I try to load my own map in my own project it just crashes ...

所以,在那之后,我决定简化我的通过只是在做像我以前给的链接,并使用 TiledMapHelper级渲染()方法的作者提供,所以我的渲染()方法现在:

So after that I decided to simplify my render() method by just doing like the link I gave before and by using the TiledMapHelper class the author provide, so there is my render() method now:

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

不过crashiiiiiiiiiiiiiingg .....
如果有人可以请提供一些帮助,这将是极大的AP preciated因为ATM我真的要疯了!

Still crashiiiiiiiiiiiiiingg.....
If someone can please provide some help it would be greatly appreciated because atm i'm really going mad !

推荐答案

我发现是什么原因造成的错误:
1)在我的打包文件所有的瓷砖有-1作为其指数
2)在我的打包文件所有的瓷砖具有相同的名称作为自己的原始瓦的文件名,但不是相同的名称包含所有打包的瓷砖.png文件。

I found what caused the error :
1) all the tiles in my "packfile" had -1 as their index
2) all the tiles in my "packfile" had the same name as their original tile file name, but not the same name as the .png file containing all the tiles packed.

目前我的屏幕是黑色的,所以我觉得没有瓷砖画(可能是因为我给随机指标在打包文件的砖 - 固定的,看到帖子的末尾),但没有引发异常而这一点。

Currently my screen is black so I think no tile is draw (probably because I gave random indexes to the tiles in the packfile - fixed, see the end of the post) but no exceptions are thrown and that's the point.

这些错误是由于节目,我来收拾这应该让我赢一次笑了瓷砖。所以我会尝试不同的选项,或者使用别的东西。
如果你想知道节目是TexturePacker GUIV3.1.0。

Those mistakes are due to the program I used to pack the tiles that was supposed to make me win time lol. So I will try different options or use something else.
If you want to know the program was "TexturePacker GUI" v3.1.0.

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

If you know what options I should/not use to avoid errors please let me know.

编辑:找到一个有用的和工作工具,用于包装瓷砖,这里是: http://freigabe.philweb.de/bubblr/texturepacker_edited.jar (链接是死的,用这个来代替=>的 http://bit.ly/1a831nv 或其他包装工具=>的 http://bit.ly/1aLgAFt

EDIT : Found a usefull and working tool for packing tiles, here it is : http://freigabe.philweb.de/bubblr/texturepacker_edited.jar (link is dead ; use this one instead => http://bit.ly/1a831nv or another packing tool => http://bit.ly/1aLgAFt)

要使用它打开CMD,进入到你下载的.jar文件,然后目录:

To use it open cmd and go to the directory where your downloaded the .jar file and then :

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

Here is dpk's tutorial I mentioned, just follow from here : http://dpk.net/2011/05/01/libgdx-box2d-tiled-maps-full-working-example-part-1/#p4

如果应用程序没有崩溃,但屏幕是黑的,只是增加相机的视口的宽度和放大器;高度。

If application doesn't crashes but the screen is black, just increase camera's viewport's width & height.

映射快乐:)!

这篇关于LibGDX - 应用程序崩溃时调用TiledMa prenderer.render()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆