Bagaimana cara menerapkan ubin yang dibuat secara prosedural di libgdx?

10

Saya membuat game Zelda-esque top-down sederhana di libgdx, dan saya ingin menerapkan ruang bawah tanah berbasis ubin yang dihasilkan secara prosedural, mirip dengan ini.

Libgdx memang memiliki kelas yang disebut TiledMap yang tampaknya sesuai dengan kebutuhan saya, namun dokumentasi di luar dokumen resmi menunjukkan bahwa TiledMaps hanya dapat digunakan bersama dengan file .tmx, atau dengan kata lain peta pra-desain. Saya telah melakukan cukup banyak Googling tanpa hasil, jadi saya bertanya di sini sebagai upaya terakhir berharap bahwa seseorang memiliki pengalaman menggunakan libgdx untuk peta ubin yang dihasilkan secara dinamis.

edit: Bisakah saya menggunakan StaticTiledMapTiles bersamaan dengan tutorial yang saya tautkan di atas untuk mencapai tujuan saya?

Terima kasih!

Camden
sumber
Tidak bisakah Anda menulis data peta yang dihasilkan ke file .tmx dan menggunakannya di LibGdx?
Kering
Itu menarik. Saya kira saya bisa, meskipun saya merasa itu tidak akan ideal untuk generasi cepat.
camden

Jawaban:

5

Anda dapat membuat peta ubin tanpa menggunakan .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.
coldWire79
sumber
Ini memberiku ide. Saat meneliti, saya menemukan contoh kode ini untuk secara dinamis menghasilkan tilemap tanpa perlu .tmxfile dari libgdx github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/… . Terima kasih.
haxpor
1

Berdasarkan saran dari / r / gamedev , saya telah memutuskan untuk tidak menggunakan TibedMap libgdx, dll. Kelas bawaan dan hanya membuat sendiri.

Saya bisa masuk ke detail yang lebih besar jika diminta, tapi inilah yang saya lakukan, pada dasarnya.

1: Hasilkan sebuah penjara bawah tanah dengan menggunakan algoritma yang awalnya saya tautkan, dan simpan koordinat ubin (bukan koordinat piksel) menggunakan Coordinatekelas yang saya buat dalam a HashMap<Coord, MapTile>. MapTilehanya kelas yang memiliki data tentang jenis ubin.

2: Dalam draw()fungsi kelas utama saya, saya menambahkan kode berikut

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

        }

Yang iterates atas setiap Coordinatedalam dungeonMapdan menarik ubin (jika koordinat ada dalam frustrasi kamera) dengan global tileSizeoffset.

Camden
sumber