2012-07-31 9 views
6
@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(); 
} 

Oto co otrzymuję przy uruchamianiu wersji Desktop:libgdx - awarie aplikacji gdy TiledMapRenderer.render wezwanie()

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) 

Próbowałem zarówno this tuto i this one i uzyskać ten sam błąd w tej samej linii mLevel.getTiledMapRenderer().render(tmp.x, tmp.y, camera.viewportWidth, camera.viewportHeight);.

EDIT: Właśnie zauważyłem, że dane z mojego pliku .tmx została automatycznie kodowane przez Kafelkowanie edytor map, więc po prostu dezaktywowany, ale wciąż ten sam błąd.
Gdybym skopiuj/wklej this project (mam na myśli cały projekt, nie tylko metody() render) działa, ale gdy próbuję załadować własną mapę w moim projekcie po prostu wywala ...

Tak potem postanowiłem uprościć moją metodę render() po prostu robi jak link dałem przed i za pomocą TiledMapHelper class autor zapewnić, więc nie jest moja metoda render() teraz:

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

Wciąż crashiiiiiiiiiiiiiingg .....
Jeśli ktoś może udzielić pomocy, będzie to gr bardzo doceniany, bo naprawdę jestem wściekły!

+0

Widziałem podobny wyjątek, gdy pomieszałem moje definicje siatki (albo zapomniałem załadować vertice, albo ustawić długość na zero). Najprawdopodobniej coś jest nie tak z definicją mapy kafelka. Sprawdź, czy istnieją wymagania dotyczące rozmiaru/skali (takie jak moc 2 lub minimum X lub coś podobnego), których nie spotykasz. –

+0

Dzięki za odpowiedź. Właśnie sprawdziłem i wszystko, co ma moc 2: widok kamery, rozmiar każdej płytki i rozmiar mojego level.png zawierający wszystkie kafelki zapakowane w jeden obraz. Tylko rozmiar mapy nie pasował, ale zmiana go nie rozwiązała mojego problemu, w każdym razie samouczek używa mapy 60 * 15, więc mapa, która się wyświetla, też nie. – Flawyte

Odpowiedz

8

znalazłem co spowodował błąd:
1) wszystkie płytki w moim „packfile” miał -1 jako indeksie
2) wszystkie płytki w moim „packfile” miał taką samą nazwę jak ich oryginalnego pliku płytek nazwa, ale nie ta sama nazwa co plik .png zawierający wszystkie wypełnione kafelki.

Obecnie mój ekran jest czarny, więc myślę, że nie płytka jest remis (prawdopodobnie dlatego, że dałem losowych indeksy płytki w packfile - stałych, patrz koniec słupka), ale nie ma wyjątków są wyrzucane i to jest punkt.

Te błędy wynikają z programu, którego użyłem do spakowania płytek, które miały sprawić, że wygrywam czas lol. Więc spróbuję różnych opcji lub skorzystam z czegoś innego.
Jeśli chcesz wiedzieć, program był "GUI TexturePacker" v3.1.0.

Jeśli znasz opcje, których powinienem/nie powinienem użyć, aby uniknąć błędów, proszę dać mi znać.

EDIT: Znaleziono przydatnych i narzędzie pracy dla płytek do pakowania, to jest tutaj: http://freigabe.philweb.de/bubblr/texturepacker_edited.jar (link jest martwy; używać ten jeden zamiast =>http://bit.ly/1a831nv lub innego narzędzia do pakowania =>http://bit.ly/1aLgAFt)

aby użyć go otworzyć cmd i przejdź do katalogu, w którym pobrany plik .jar, a następnie:

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

Oto poradnik DPK za wspominałem, wystarczy postępować zgodnie z tutaj: http://dpk.net/2011/05/01/libgdx-box2d-tiled-maps-full-working-example-part-1/#p4

Jeśli aplikacja nie zawiesza się, ale ekran jest czarny, po prostu zwiększ szerokość okienka kamery o & wysokości.

Szczęśliwe mapowanie :)!

+0

dziękuję bardzo, robię te same błędy –

+0

Użyłem również "GUI TexturePacker" i napotkałem ten sam problem. Dzięki za dostarczenie alternatywy! –

+0

@miNde link jest martwy – tsukimi