如何在libgdx中获取tilesmap单元格的位置

时间:2015-01-06 00:19:19

标签: java libgdx

我有一个等距的平铺地图,我想获得屏幕中给定单元格的位置(x,y)。这可能吗?

cell = ((TiledMapTileLayer) map.getLayers().get(0)).getCell(0, 0);

如何获取此单元格的位置以便我可以在其上放置一个精灵?

2 个答案:

答案 0 :(得分:1)

这是一个简单的测试。

public void chageTile(float xActor, float yActor){

     int tiledPx = 32; //yourPixelPerTile.

     int ajusteX = xActor / tiledPx;
     int ajusteY = yActor / tiledPx;


     //get(0) is layer 0 in your tilemap
     TiledMapTileLayer tileid = (TiledMapTileLayer)mapActual.getLayers().get(0);

     TiledMapTileLayer.Cell cell = new TiledMapTileLayer.Cell();

     //mapActual is your reference a your mapTile
     //MoldeTileSet is a name of the tileset in your map
     // and getTile(3) is a numbre 3 of de tileset image

     cell.setTile(mapActual.getTileSets().getTileSet("MoldeTileSet").getTile(3));

     Gdx.app.log("ChangeTileInPosPlayer", "");                  
     tileid.setCell(ajusteX, ajusteY, cell);    

     Gdx.app.log("ChangeTileInPosPlayer", "ajusteY +1");
     tileid.setCell(ajusteX, ajusteY + 1, cell);      

}

你可能想要使用propiedes等来过滤你想要更改的图块,所以这不是null或任何东西

 if (tileid.getCell(ajusteX, ajusteY).getTile().
     getProperties().get("YourNameInTilePropertires", String.class) != null ){

        tileid.setCell(ajusteX, ajusteY, cell);      
}

如果你有任何错误或没有工作警告,呃我现在无法测试,我希望能提供帮助。

P.S:这或多或少是什么,我用于ortogonal tile,从未使用过测试用于平铺等距,我认为它可以工作或者或多或少相等。

答案 1 :(得分:0)

我最终创建了一个解析器,它将平铺文件导出为JSON,并将每个tile导入为扩展的scene2D actor,其中包含我需要的所有方法和变量。我甚至可以解析瓷砖信息,例如瓷砖组的地形类型或瓷砖的高度(我使用的是具有多个高度等级的等距地图)

我认为这是我个案中最好的解决方案。我没有发布任何代码,因为它非常具体,所以如果有人想要使用这种方法,你必须研究你生成的json文件才能正确解析它。无论如何,如果有人需要它作为参考,请给我发一封电子邮件。