2017-10-28 55 views
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 

回答

1

你重写细胞瓷砖

1)这里cell.setTile(animCloudTMap);

2)这里cell.setTile(animCmdTMap);

3)here)cell.setTile(animSoldierTMap);

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

与NO性质的新瓷砖。

您的第一个循环工作,因为你在重写之前得到它TiledMapTile tile = cell.getTile();

+0

啊我明白了,谢谢你的快速回复!我只是将这段代码添加到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);然后它工作! –