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

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

Мне удалось загрузить изометрическую карту из ресурсов, используя IsometricTiledMapRenderer в качестве средства визуализации и OrthographicCamera для отображения карты (все работает, как описано на странице вики). Я также смог программно заполнить некоторую плитку на слое карты, но моя проблема начинается, когда я пытаюсь использовать 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, но я знаю, что использую" мозаичную карту "(а не" карту приливов "). Однако .. кто-нибудь может объяснить, как я могу сделать анимацию на конкретном тайле?


person Felice Ostuni    schedule 10.03.2013    source источник
comment
Какая у вас проблема?   -  person Exikle    schedule 10.08.2013
comment
как и в последних 2 строках перед renderer = setCell с анимированной плиткой, возникает исключение Nullpoint   -  person Felice Ostuni    schedule 10.09.2013
comment
попробуйте установить (0,0) в качестве плитки игрока. Я думаю, хотя и не уверен, что твоя анимированная часть неверна. Это может помочь youtube.com/watch?v=xubOtuq2cEo   -  person Exikle    schedule 10.09.2013


Ответы (1)


Я уже несколько раз искал себя. Но теперь он заработал.

Лучше всего предположить, что в вашем наборе нет 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) был!)

person Steffen    schedule 24.09.2013
comment
Большое спасибо, проблема была в наборе тайлов, tileset.getTile (8) возвращает null после добавления предложенной вами проверки. - person Felice Ostuni; 26.09.2013