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!
- 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.
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.
- Acest lucru îmi dă o idee. Sus pe cercetare, am găsit aceste coduri de exemplu pentru a genera dinamic tilemap fără a avea nevoie de
.tmx
fișier din libgdx github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/…. Mulțumesc. > .
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.