Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

LibGDX - Application crashes when call 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();
}

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)

I've tried both this tuto and this one, and I get the same error at the same line mLevel.getTiledMapRenderer().render(tmp.x, tmp.y, camera.viewportWidth, camera.viewportHeight);.

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

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();

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

like image 230
flawyte Avatar asked Jul 31 '12 09:07

flawyte


1 Answers

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.

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.

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)

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

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.

Happy mapping :) !

like image 189
flawyte Avatar answered Oct 22 '22 05:10

flawyte