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) был!)