2017-10-28 2 views
0

Ich habe versucht, Funktionalität zu meinem libGdx Spiel hinzuzufügen, um die Eigenschaften einer Kachel zu erhalten, wenn ich auf eine Zelle klicke. Ich habe this Tutorial dazu verwendet, wie ich die Mausinteraktion zu meiner Tilemap hinzufügen kann. Mein Problem ist, dass auf die Eigenschaften der Kachel innerhalb der ersten verschachtelten for-Schleife zugegriffen werden kann, aber wenn ich erneut auf die Eigenschaften zugreife, wird null zurückgegeben. Ich versuchte, die Zelle manuell zugreifen, die ebenfalls fehlgeschlagen :(Java: LibGdx TileMapTile bekommt keine Eigenschaften nach der Verwendung in verschachtelten für Schleife

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); 

Hier ist die Ausgabe:

cloud 
... 
cloud 
null 
... 
null 

Antwort

1

Sie sind Umschreiben Zelle Kachel

1) hier cell.setTile(animCloudTMap);

2) hier cell.setTile(animCmdTMap);

3) hier cell.setTile(animSoldierTMap);

4) und hier cell.setTile(animWallTMap);

mit neuen Fliesen mit NO-Eigenschaften.

Ihre erste Schleife funktionierte, weil Sie es vor dem Umschreiben bekommen.

+0

Ah ich sehe, danke für die schnelle Antwort! Ich habe diesen Code einfach zu den if-Anweisungen hinzugefügt: MapProperties mp = tile.getProperties(); \t \t \t \t \t \t \t Zelle.setTile (animWallTMap); \t \t \t \t \t \t \t Kachel = Zelle.getTile(); \t \t \t \t \t \t \t kachel.getProperties(). PutAll (mp); Dann hat es funktioniert! –

Verwandte Themen