【问题标题】:Java: LibGdx TileMapTile not getting properties after used in nested for loopJava:在嵌套 for 循环中使用后,LibGdx TileMapTile 未获取属性
【发布时间】:2017-10-28 20:45:21
【问题描述】:

我一直在尝试向我的 libGdx 游戏添加功能,以便在单击单元格时获取图块的属性。我使用了this 教程来了解如何将鼠标交互添加到我的瓷砖地图中。我的问题是可以在第一个嵌套的 for 循环中访问磁贴的属性,但是当我再次尝试访问属性时,它返回 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

【问题讨论】:

    标签: java libgdx tiled


    【解决方案1】:

    你正在重写单元格图块

    1) 这里cell.setTile(animCloudTMap);

    2) 这里cell.setTile(animCmdTMap);

    3) 这里cell.setTile(animSoldierTMap);

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

    带有没有属性的新图块。

    您的第一个循环有效,因为您在重写之前得到了TiledMapTile tile = cell.getTile();

    【讨论】:

    • 啊,我明白了,谢谢您的快速回复!我只是将此代码添加到 if 语句中: MapProperties mp = tile.getProperties(); cell.setTile(animWallTMap);平铺 = 单元格.getTile(); tile.getProperties().putAll(mp);然后就成功了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 2022-01-14
    • 2021-12-11
    • 1970-01-01
    相关资源
    最近更新 更多