Wie würde ich prozedural generierte Kacheln in libgdx implementieren?

10

Ich erstelle ein einfaches Zelda-ähnliches Top-Down-Spiel in libgdx und möchte kachelbasierte Dungeons implementieren, die ähnlich wie dieses prozedural generiert werden .

Libgdx hat eine Klasse namens TiledMap, die meinen Anforderungen zu entsprechen scheint. Die Dokumentation außerhalb der offiziellen Dokumente legt jedoch nahe, dass TiledMaps nur in Verbindung mit .tmx-Dateien oder mit anderen Worten vorgefertigten Karten verwendet werden kann. Ich habe ziemlich viel vergeblich gegoogelt, daher frage ich hier als letzten Ausweg in der Hoffnung, dass jemand Erfahrung mit libgdx für dynamisch generierte Kachelkarten hat.

Bearbeiten: Könnte ich StaticTiledMapTiles in Verbindung mit dem Tutorial verwenden, auf das ich oben verlinkt habe, um mein Ziel zu erreichen?

Vielen Dank!

Camden
quelle
Können Sie die Daten der generierten Karten nicht in eine .tmx-Datei schreiben und diese in LibGdx verwenden?
Trocknet
Das ist interessant. Ich denke, ich könnte, obwohl ich der Meinung bin, dass dies nicht ideal für eine schnelle Generierung wäre.
Camden

Antworten:

5

Sie können gekachelte Karten ohne Verwendung von .tmx erstellen.

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.
ColdWire79
quelle
Das gibt mir eine Idee. Bei der Recherche habe ich festgestellt, dass dieser Beispielcode eine Tilemap dynamisch generiert, ohne dass eine .tmxDatei aus libgdx github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/… erforderlich ist . Vielen Dank.
Haxpor
1

Aufgrund der Ratschläge von / r / gamedev habe ich beschlossen, auf die Verwendung der in libgdx integrierten Klassen TiledMap usw. zu verzichten und nur meine eigenen zu erstellen.

Ich kann auf Anfrage näher darauf eingehen, aber hier ist, was ich im Wesentlichen getan habe.

1: Generiere einen Dungeon mit dem Algorithmus, mit dem ich ursprünglich verknüpft war, und speichere Kachelkoordinaten (keine Pixelkoordinaten) mit einer CoordinateKlasse, die ich in a erstellt habe HashMap<Coord, MapTile>. MapTileist nur eine Klasse, die Daten über den Kacheltyp enthält.

2: In der draw()Funktion meiner Hauptklasse habe ich den folgenden Code hinzugefügt

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

        }

Welches iteriert über jedes Coordinatein dungeonMapund zeichnet die Kachel (wenn sich die Koordinate im Kamerastumpf befindet) mit einem globalen tileSizeVersatz.

Camden
quelle