Java:LibGdx TileMapTile 在嵌套 for 循环中使用后未获取属性

标签 java libgdx tiled

我一直在尝试向我的 libGdx 游戏添加功能,以便在单击单元格时获取图 block 的属性。我用过this有关如何向我的图 block map 添加鼠标交互的教程。我的问题是可以在第一个嵌套 for 循环中访问图 block 的属性,但是当我尝试再次访问这些属性时,它返回 null。我尝试手动访问单元格,但也失败了:(

    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

最佳答案

您正在重写单元格图 block

1) 这里cell.setTile(animCloudTMap);

2) 这里cell.setTile(animCmdTMap);

3) 这里cell.setTile(animSoldierTMap);

4) 和这里 cell.setTile(animWallTMap);

使用没有属性的新图 block 。

你的第一个循环成功了,因为你在重写之前得到了它TiledMapTiletile = cell.getTile();

关于Java:LibGdx TileMapTile 在嵌套 for 循环中使用后未获取属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46994315/

相关文章:

java - 为什么我的 AES 加密会引发 InvalidKeyException?

java - JFreeChart 隐藏(一些)x 轴值

java - 自动将注释附加到 Netbeans 中自动插入的大括号

Haxe - 为什么我不能访问 child 的属性而不会收到 parent 没有给定属性的错误?

java - 将 List<classname> 传递给 ArrayAdapter

android - 导出带有 ProGuard 错误的签名 APK

java - libgdx numSamples 有什么样的副作用

java - 重叠2d : How does rendering and loading work?

java - libGDX - 如何在相机视口(viewport)中复制图 block 而不是按层复制?

java - 渲染在屏幕上看到的图 block