0

これに似た質問を見たことがありますが、Libgdx プロジェクト (デスクトップのみ) で経験したことと一致するものはありません。Tiled を使用して .tmx マップを作成し、それを assets フォルダーにコピーしました。このフォルダーには、gameScreens (マップを含む) と tiles の 2 つのサブパッケージがあります。Tiled を使用して Eclipse から .tmx マップを開くと、問題なく動作します。.tmx は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<map version="1.0" orientation="orthogonal" renderorder="right-down" width="8" height="8" tilewidth="32" tileheight="32">
 <tileset firstgid="1" name="default" tilewidth="32" tileheight="32">
  <tile id="0">
   <image width="32" height="32" source="../tiles/rock.png"/>
  </tile>
  <tile id="1">
   <image width="32" height="32" source="../tiles/tile_default_1.jpg"/>
  </tile>
  <tile id="2">
   <image width="32" height="32" source="../tiles/tile_default_2.jpg"/>
  </tile>
  <tile id="3">
   <image width="32" height="32" source="../tiles/wall.png"/>
  </tile>
 </tileset>
 <layer name="Camada de Tiles 1" width="8" height="8">
  <data encoding="base64" compression="gzip">
   eJxjYWBgYCGAmXFgZHlGJHFGLPKU8okxH5f78GEAbrAA2Q==
  </data>
 </layer>
</map>

抽象クラス GameState を作成しました。

package com.mygdx.cavedive.game.GameStates;

//imports

public abstract class GameState {

    private static TmxMapLoader mapLoader = new TmxMapLoader();
    protected static OrthogonalTiledMapRenderer otmr;
    protected static OrthographicCamera cam;

    protected OrthogonalTiledMapRenderer getRenderer() {

        return otmr;

    }

    protected TmxMapLoader getMapLoader() {

        return mapLoader;

    }

    protected void disposeRenderer() {

        otmr.dispose();

    }

}

およびそれを拡張するクラス:

package com.mygdx.cavedive.game.GameStates;

//imports

public class Level_1 extends GameState implements Screen {

    private TiledMap map;

    @Override
    public void render(float delta) {

        //Clear the screen
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        otmr.setView(cam);

        //Render the screen
        otmr.render();

    }

    @Override
    public void resize(int width, int height) {

        cam.viewportWidth = width;
        cam.viewportHeight = height;
        cam.update();

    }

    @Override
    public void show() {

        map = getMapLoader().load("gameScreens/level1.tmx");
        otmr = new OrthogonalTiledMapRenderer(map, 1f / 32f);
        cam = new OrthographicCamera();

    }

    @Override
    public void hide() {

        dispose();

    }

    @Override
    public void pause() {
    }

    @Override
    public void resume() {
    }

    @Override
    public void dispose() {

        disposeRenderer();
        map.dispose();

    }

}

今ここに私が得るものがあります:

Exception in thread "LWJGL Application" java.lang.NullPointerException
    at com.badlogic.gdx.maps.tiled.TmxMapLoader.loadTilesets(TmxMapLoader.java:246)
    at com.badlogic.gdx.maps.tiled.TmxMapLoader.load(TmxMapLoader.java:118)
    at com.badlogic.gdx.maps.tiled.TmxMapLoader.load(TmxMapLoader.java:104)
    at com.mygdx.cavedive.game.GameStates.Level_1.show(Level_1.java:40)
    at com.badlogic.gdx.Game.setScreen(Game.java:61)
    at com.mygdx.cavedive.game.App.GameCore.create(GameCore.java:28)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:136)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:114)

タイルセットと関係がありますが、何が原因かわかりません。

4

1 に答える 1

2

各タイルが独自の画像を参照する「画像コレクション」タイルセットは、Tiled 0.10 の新機能です。使用している libgdx のバージョンは、これらの種類のタイルセットをまだサポートしていない可能性があります。

github のこの問題によると、libgdx nightlies はこの機能をサポートしています。

于 2014-12-02T09:13:26.573 に答える