7

我对 LibGDX 和平铺地图有一些问题。我来自 Corona SDK (Lua),我使用过 Lime(第三方库来处理 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但我知道我使用的是“平铺地图”(而不是“潮汐地图”)。但是..有人可以解释我如何在特定图块上制作动画?

4

1 回答 1

4

通过这几次搜索我的自我。但现在让它工作。

最好的猜测是您的图块集没有 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) 是!)

于 2013-09-24T15:56:15.890 回答