Cum aș putea implementa dale generate procedural în libgdx? (Dezvoltarea jocurilor, Java, Libgdx, Dale, Generare Procedurală, Tilemap)

camden a intrebat.
a intrebat.

Creez un joc simplu de sus în jos Zelda-esque în libgdx și vreau să implementez temnițe bazate pe țiglă care sunt generate procedural, similar cu acest lucru.

Libgdx are o clasă numită TiledMap, care pare să se potrivească nevoilor mele, însă documentația din afara documentelor oficiale sugerează că TiledMaps poate fi utilizată numai împreună cu fișiere .tmx, sau, cu alte cuvinte, hărți pre-proiectate. Am căutat destul de mult pe Google, fără niciun rezultat, așa că întreb aici în ultimă instanță, în speranța că cineva are experiență în utilizarea libgdx pentru hărți de tip tile generate dinamic.

modificare: Aș putea folosi StaticTiledMapTiles împreună cu tutorialul pe care l-am legat mai sus pentru a-mi atinge scopul?

Mulțumesc!

Comentarii

  • Nu puteți scrie datele hărților generate într-un fișier .tmx și să le folosiți în LibGdx?  > Por Dries.
  • Este interesant. Presupun că aș putea, deși am impresia că nu ar fi ideal pentru o generare rapidă.-  > Por camden.
2 răspunsuri
coldWire79

Puteți crea hărți în plăci pe fără a folosi .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.

Comentarii

camden

Pe baza sfaturilor primite de la /r/gamedev, am decis să renunț la utilizarea claselor încorporate din libgdx’s TiledMap, etc. și să-mi construiesc propriile clase.

Pot să intru în mai multe detalii dacă mi se cere, dar iată ce am făcut, în esență.

1: Generați o temniță folosind algoritmul pe care l-am legat inițial și stocați coordonatele plăcilor (nu cotele pixelilor) folosind o clasă Coordinate clasă pe care am făcut-o în cadrul unei HashMap<Coord, MapTile>. MapTile este doar o clasă care are date despre tipul de tile.

2: În draw() din clasa mea principală am adăugat următorul cod

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

        }

Care itera peste fiecare Coordinate din dungeonMap și desenează țigla (dacă coordonata se află în frustum-ul camerei) cu o valoare globală tileSize offset global.