¿Cómo implementaría mosaicos generados por procedimientos en libgdx?

10

Estoy creando un juego simple de arriba hacia abajo de Zelda-esque en libgdx, y quiero implementar mazmorras basadas en mosaicos que se generan por procedimientos, similar a esto.

Libgdx tiene una clase llamada TiledMap que parece satisfacer mis necesidades, sin embargo, la documentación fuera de los documentos oficiales sugiere que TiledMaps solo se puede usar junto con archivos .tmx o, en otras palabras, mapas prediseñados. He hecho una buena cantidad de Google en vano, por lo que estoy preguntando aquí como último recurso con la esperanza de que alguien tenga experiencia en el uso de libgdx para mapas de mosaicos generados dinámicamente.

editar: ¿Podría usar StaticTiledMapTiles junto con el tutorial al que me vinculé anteriormente para lograr mi objetivo?

¡Gracias!

Camden
fuente
¿No puede escribir los datos de los mapas generados en un archivo .tmx y usarlos en LibGdx?
seca el
Eso es interesante. Supongo que podría, aunque siento que eso no sería ideal para una generación rápida.
camden

Respuestas:

5

Puede crear mapas en mosaico sin usar .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
fuente
Esto me da una idea. Al investigar, encontré este código de ejemplo para generar dinámicamente el mapa de mosaico sin necesidad de .tmxarchivo de libgdx github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/… . Gracias.
haxpor
1

Basado en el consejo de / r / gamedev , he decidido renunciar al uso de las clases integradas de libgdx's TiledMap, etc. y simplemente construir la mía.

Puedo entrar en más detalles si así lo solicita, pero esto es lo que he hecho, esencialmente.

1: Genere una mazmorra usando el algoritmo al que originalmente me vinculé, y almacene las coordenadas de mosaico (no las coordenadas de píxeles) usando una Coordinateclase que hice en a HashMap<Coord, MapTile>. MapTilees solo una clase que tiene datos sobre el tipo de mosaico.

2: en la draw()función de mi clase principal agregué el siguiente código

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

        }

Que itera sobre cada Coordinateen el dungeonMapy dibuja el mosaico (si la coordenada está en el centro de la cámara) con un tileSizedesplazamiento global .

Camden
fuente