0
我一直在尝试向我的libGdx游戏添加功能,以在单击某个单元格时获取某个图块的属性。我使用this教程介绍如何将鼠标交互添加到我的地图。我的问题是tile的属性可以在第一个嵌套的for循环中访问,但是当我尝试再次访问这些属性时,它将返回null。我试图访问手动细胞,这也失败了:(Java:LibGdx TileMapTile在嵌套for循环中使用后没有获得属性
AnimatedTiledMapTile animCloudTMap = new AnimatedTiledMapTile(1/12f, fcloudTiles);
AnimatedTiledMapTile animSoldierTMap = new AnimatedTiledMapTile(1/16f, fSoldierTiles);
AnimatedTiledMapTile animCmdTMap = new AnimatedTiledMapTile(1/12f, fCmdiles);
AnimatedTiledMapTile animWallTMap = new AnimatedTiledMapTile(1/12f, fWallTiles);
TiledMapTileLayer layer = (TiledMapTileLayer) map.getLayers().get(0);
//System.out.println(layer.getName());
for(int x = 0; x < layer.getWidth(); x++) {
for(int y = 0; y < layer.getHeight(); y++) {
Cell cell = layer.getCell(x, y);
if(cell != null) {
//System.out.println("First "+x +", "+ y);
TiledMapTile tile = cell.getTile();
if(tile.getProperties().containsKey("animated")
&& tile.getProperties().get("animated",String.class).equals("true")) {
if(tile.getProperties().get("name",String.class).equals("cloud")) {
cell.setTile(animCloudTMap);
}
if(tile.getProperties().get("name",String.class).equals("cmd")) {
cell.setTile(animCmdTMap);
}
if(tile.getProperties().get("name",String.class).equals("soldier")) {
cell.setTile(animSoldierTMap);
}
if(tile.getProperties().get("name",String.class).equals("wall")) {
cell.setTile(animWallTMap);
}
}
tile.getProperties().put("X", x);
tile.getProperties().put("Y", y);
System.out.println(tile.getProperties().get("name", String.class));
}
}
}
for(int x = 0; x < layer.getWidth(); x++) {
for(int y = 0; y < layer.getHeight(); y++) {
Cell cell = layer.getCell(x, y);
if(cell != null) {
TiledMapTile tile = cell.getTile();
System.out.println(tile.getProperties().get("name", String.class));
}
}
}
rend = new OrthogonalTiledMapRenderer(map, .125f);
rend.setView(cam);
//Impose an input grid
stage = new TiledMapStage(map);
stage.getViewport().setCamera(cam);
Gdx.input.setInputProcessor(stage);
这里是输出:
cloud
...
cloud
null
...
null
啊我明白了,谢谢你的快速回复!我只是将这段代码添加到if语句中:MapProperties mp = tile.getProperties(); \t \t \t \t \t \t \t cell.setTile(animWallTMap); \t \t \t \t \t \t \t tile = cell.getTile(); \t \t \t \t \t \t \t tile.getProperties()。putAll(mp);然后它工作! –