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();得到了它。