【问题标题】:NullPointerException LibgdxNullPointerException Libgdx
【发布时间】:2015-01-30 03:22:28
【问题描述】:

我见过与此类似的问题,但没有一个与我在 Libgdx 项目中遇到的问题相匹配(仅限桌面)。我使用 Tiled 制作了一个 .tmx 地图并将其复制到 assets 文件夹,该文件夹有两个子包:gameScreens(带有地图)和瓷砖。如果我使用 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)

这与图块集有关,但我不知道是什么。

【问题讨论】:

  • 我刚刚发现这个问题是因为我将单独的图像加载到了我的图块集中。然而,将它们全部连接到一个 .png 中,可以使其正常运行。我仍然不知道为什么会这样。

标签: java eclipse libgdx tiled


【解决方案1】:

每个图块引用自己的图像的“图像集合”图块集是 Tiled 0.10 中的一个新功能。您使用的 libgdx 版本很可能还不支持这些类型的图块集。

根据this issue on github,libgdx nightlies 确实支持此功能。

【讨论】:

  • 哦,就是这样。谢谢
猜你喜欢
  • 1970-01-01
  • 2014-05-10
  • 1970-01-01
  • 2023-03-31
  • 2018-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多