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);然後它工作! –