Come implementare i tile generati proceduralmente in libgdx?


10

Sto creando un semplice gioco in stile Zelda top-down in libgdx e voglio implementare dungeon basati su piastrelle generati proceduralmente, simili a questo.

Libgdx ha una classe chiamata TiledMap che sembrerebbe adatta alle mie esigenze, tuttavia la documentazione al di fuori dei documenti ufficiali suggerisce che TiledMaps può essere usata solo insieme ai file .tmx, o in altre parole mappe pre-progettate. Ho fatto una buona dose di Google senza alcun risultato, quindi chiedo qui come ultima risorsa sperando che qualcuno abbia esperienza nell'uso di libgdx per mappe di tessere generate dinamicamente.

modifica: potrei usare StaticTiledMapTiles insieme al tutorial che ho collegato sopra per raggiungere il mio obiettivo?

Grazie!


Non riesci a scrivere i dati delle mappe generate in un file .tmx e utilizzarli in LibGdx?
asciuga il

Interessante. Suppongo di poterlo fare, anche se penso che non sarebbe l'ideale per la generazione veloce.
Camden,

Risposte:


5

Puoi creare mappe affiancate senza usare .tmx.

TiledMap map = new TileMap();
MapLayers layers = map.getLayers();

TiledMapTileLayer layer1 = new TiledMapTileLayer(width, height, tile_width, tile_height);
Cell cell = new Cell();

cell.setTile(new StaticTiledMapTile(texture_region));
layer1.setCell(x, y, cell);

layers.addLayer(layer1);

Each of these classes are in the docs for libgdx.

Questo mi dà un'idea. Sulla ricerca, ho trovato questo codice di esempio per generare dinamicamente tilemap senza la necessità di un .tmxfile da libgdx github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/… . Grazie.
haxpor,

1

Sulla base dei consigli di / r / gamedev , ho deciso di rinunciare all'uso delle classi integrate di TiledMap di libgdx, ecc. E di crearne una mia.

Posso approfondire se richiesto, ma ecco quello che ho fatto, essenzialmente.

1: Genera un dungeon usando l'algoritmo a cui ero originariamente collegato e memorizza le coordinate delle tessere (non i pixel coord) usando una Coordinateclasse che ho creato in a HashMap<Coord, MapTile>. MapTileè solo una classe che contiene dati sul tipo di riquadro.

2: Nella draw()funzione della mia classe principale ho aggiunto il seguente codice

ConcurrentHashMap<Coord, MapTile> dungeonMap = dungeonGen.getMap();
        for(Entry<Coord, MapTile> entry : dungeonMap.entrySet()){
            Coord coord = entry.getKey();
            MapTile tile = entry.getValue();

            if((inCameraFrustum(coord.getX() * tileSize, coord.getY() * tileSize, 100))){
                game.batch.draw(dungeonGen.getTileTexture(tile),
                        coord.getX() * tileSize, coord.getY() * tileSize);
            }

        }

Che itera su ogni Coordinatein dungeonMape disegna la tessera (se la coordinata si trova nel tronco di fotocamera) con una globale tileSizeoffset.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.