LibGDX: как сделать анимацию на изометрической плиточной карте?

у меня проблема с LibGDX и плиточными картами. Я пришел из Corona SDK (Lua), и я использовал Lime (сторонний lib для обработки карт tmx), теперь я переключился на LibGDX и следовал этой действительно недавней функции: GraphicsTileMaps

я смог загрузить изометрическую карту из активов, используя IsometricTiledMapRenderer как визуализатор и OrthographicCamera для отображения карты (все работает, как описано на странице wiki). Я также смог программно заполнить некоторую плитку на слое карты, но моя проблема начинается, когда я пытаюсь использовать AnimatedTiledMapTile:

    map = new TmxMapLoader().load(...);

    TiledMapTileLayer layer = (TiledMapTileLayer) map.getLayers().getLayer("layer1");
    TiledMapTileSet tileset =  map.getTileSets().getTileSet("tileset1");
    TiledMapTile grassTile =  tileset.getTile(4);
    TiledMapTile rockTile =  tileset.getTile(6);

    Array<StaticTiledMapTile> playerTileArr = new Array<StaticTiledMapTile>();
    playerTileArr.add((StaticTiledMapTile)tileset.getTile(7));
    playerTileArr.add((StaticTiledMapTile)tileset.getTile(8));

    Cell grass = new Cell();
    grass.setTile(grassTile);

    Cell player = new Cell();
    player.setTile(new AnimatedTiledMapTile(0.1f, playerTileArr));

    layer.setCell(0,0, grass);  // <--- This works.
    layer.setCell(0,1, player); // <--- When I try this, it causes 
                                //      a NullPointerException.

    renderer = IsometricTiledMapRenderer(map, 1 / 30f);
    ...

может кто-нибудь помочь? Я нашел AnimatedTiledMapTile пример использования TideMapLoader но я знаю, что использую"плиточным карта" (а не "волна карта"). Однако.. кто-то может объяснить, как я могу сделать анимацию на определенной плитке?

1 ответов


был этим несколько раз, ища себя. Но теперь это сработало.

лучше всего предположить, что ваш tileset не имеет 7 или 8 плиток.

Я получил следующий код для работы:

    TiledMapTileLayer layer = (TiledMapTileLayer) map.getLayers().get(0);
    TiledMapTileSet tileset = map.getTileSets().getTileSet(0);

    Array<StaticTiledMapTile> at = new Array<StaticTiledMapTile>();
    if (tileset.getTile(0) != null) at.add((StaticTiledMapTile) tileset.getTile(0));
    if (tileset.getTile(1) != null) at.add((StaticTiledMapTile) tileset.getTile(1));
    if (tileset.getTile(2) != null) at.add((StaticTiledMapTile) tileset.getTile(2));
    if (tileset.getTile(3) != null) at.add((StaticTiledMapTile) tileset.getTile(3));

    layer.getCell(2, 2).setTile(new AnimatedTiledMapTile(0.3f, at));

только getTile(1) и getTile(2) было != null-у меня было только 2 плитки. (моя проблема заключалась в том, что getTile(0) не был первой плиткой.. getTile(1) был!)