Java:LibGdx TileMapTile 在嵌套 for 循环中使用后未获取属性
Java: LibGdx TileMapTile not getting properties after used in nested for loop
我一直在尝试向我的 libGdx 游戏添加功能,以便在我单击单元格时获取图块的属性。我使用了 this 教程来了解如何将鼠标交互添加到我的地图中。我的问题是可以在第一个嵌套 for 循环中访问磁贴的属性,但是当我尝试再次访问这些属性时它 returns 为空。我尝试手动访问单元格,但也失败了:(
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
您正在重写单元格拼贴
1) 这里cell.setTile(animCloudTMap);
2) 这里cell.setTile(animCmdTMap);
3) 这里cell.setTile(animSoldierTMap);
4) 和这里 cell.setTile(animWallTMap);
没有属性的新图块。
你的第一个循环成功了,因为你在重写之前TiledMapTile tile = cell.getTile();
得到了它。
我一直在尝试向我的 libGdx 游戏添加功能,以便在我单击单元格时获取图块的属性。我使用了 this 教程来了解如何将鼠标交互添加到我的地图中。我的问题是可以在第一个嵌套 for 循环中访问磁贴的属性,但是当我尝试再次访问这些属性时它 returns 为空。我尝试手动访问单元格,但也失败了:(
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
您正在重写单元格拼贴
1) 这里cell.setTile(animCloudTMap);
2) 这里cell.setTile(animCmdTMap);
3) 这里cell.setTile(animSoldierTMap);
4) 和这里 cell.setTile(animWallTMap);
没有属性的新图块。
你的第一个循环成功了,因为你在重写之前TiledMapTile tile = cell.getTile();
得到了它。