2013-03-10 15 views
7

Ho qualche problema con LibGDX e le mappe piastrellate. vengo dal Corona SDK (Lua) e ho usato Lime (lib terze parti per gestire le mappe TMX), ora sono passato a LibGDX e seguii questa caratteristica davvero recente: GraphicsTileMapsLibGDX: come fare le animazioni su una mappa piastrellata isometrica?

sono stato in grado di caricare una mappa isometrica da risorse che utilizzano IsometricTiledMapRenderer come renderer e un OrthographicCamera per visualizzare la mappa (tutto funziona come descritto nella pagina wiki). Sono stato anche in grado di riempire di programmazione certa piastrella sul livello della mappa, ma il mio problema inizia, quando provo ad usare AnimatedTiledMapTile:

map = new TmxMapLoader().load(...); 

    TiledMapTileLayer layer = (TiledMapTileLayer) map.getLayers().getLayer("layer1"); 
    TiledMapTileSet tileset = map.getTileSets().getTileSet("tileset1"); 
    TiledMapTile grassTile = tileset.getTile(4); 
    TiledMapTile rockTile = tileset.getTile(6); 

    Array<StaticTiledMapTile> playerTileArr = new Array<StaticTiledMapTile>(); 
    playerTileArr.add((StaticTiledMapTile)tileset.getTile(7)); 
    playerTileArr.add((StaticTiledMapTile)tileset.getTile(8)); 

    Cell grass = new Cell(); 
    grass.setTile(grassTile); 

    Cell player = new Cell(); 
    player.setTile(new AnimatedTiledMapTile(0.1f, playerTileArr)); 

    layer.setCell(0,0, grass); // <--- This works. 
    layer.setCell(0,1, player); // <--- When I try this, it causes 
           //  a NullPointerException. 

    renderer = IsometricTiledMapRenderer(map, 1/30f); 
    ... 

Qualcuno può aiutarmi? Ho trovato un esempio di utilizzo AnimatedTiledMapTile per TideMapLoader ma so che sto utilizzando una "piastrellata mappa" (non una "mappa marea"). Tuttavia ... qualcuno può spiegare come posso creare un'animazione su una tessera specifica?

+0

Che problema ottieni? – Exikle

+0

come nelle ultime 2 righe prima di "renderer =" setCell con una tessera animata causa un'eccezione Nullpoint –

+0

provare l'impostazione (0,0) come tessera giocatore. Penso, anche se non sono sicuro, che la parte animata sia sbagliata. Questo potrebbe aiutare http://www.youtube.com/watch?v=xubOtuq2cEo – Exikle

risposta

3

Ho passato un po 'di tempo a cercarmi. Ma ha funzionato ora.

La migliore ipotesi è che il tuo tileset non abbia 7 o 8 tessere.

ho ottenuto il seguente codice funzioni:

TiledMapTileLayer layer = (TiledMapTileLayer) map.getLayers().get(0); 
    TiledMapTileSet tileset = map.getTileSets().getTileSet(0); 

    Array<StaticTiledMapTile> at = new Array<StaticTiledMapTile>(); 
    if (tileset.getTile(0) != null) at.add((StaticTiledMapTile) tileset.getTile(0)); 
    if (tileset.getTile(1) != null) at.add((StaticTiledMapTile) tileset.getTile(1)); 
    if (tileset.getTile(2) != null) at.add((StaticTiledMapTile) tileset.getTile(2)); 
    if (tileset.getTile(3) != null) at.add((StaticTiledMapTile) tileset.getTile(3)); 

    layer.getCell(2, 2).setTile(new AnimatedTiledMapTile(0.3f, at)); 

Solo GetTile (1) e GetTile (2) era = null - ho avuto solo 2 tessere!. (il mio problema era che getTile (0) non era la prima tessera .. getTile (1) era!)

+0

molto, il problema era nel tileset, tileset.getTile (8) restituisce null dopo aver aggiunto il controllo suggerito. –