Comment pourrais-je implémenter des tuiles générées de manière procédurale dans libgdx?

10

Je crée un jeu Zelda-esque simple de haut en bas dans libgdx, et je veux implémenter des donjons basés sur des tuiles qui sont générés de manière procédurale, similaire à cela.

Libgdx a une classe appelée TiledMap qui semble correspondre à mes besoins, cependant la documentation en dehors des documents officiels suggère que TiledMaps ne peut être utilisé qu'en conjonction avec des fichiers .tmx, ou en d'autres termes des cartes pré-conçues. J'ai fait pas mal de recherches sur Google en vain, donc je demande ici en dernier recours en espérant que quelqu'un ait de l'expérience avec libgdx pour les cartes de tuiles générées dynamiquement.

edit: Puis-je utiliser StaticTiledMapTiles en conjonction avec le tutoriel que j'ai lié ci-dessus pour atteindre mon objectif?

Merci!

camden
la source
Vous ne pouvez pas écrire les données des cartes générées dans un fichier .tmx et les utiliser dans LibGdx?
Sèche
C'est intéressant. Je suppose que je pourrais, bien que je pense que ce ne serait pas idéal pour une génération rapide.
camden

Réponses:

5

Vous pouvez créer des cartes en mosaïque sans utiliser .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
la source
Cela me donne une idée. Lors de recherches, j'ai trouvé ces exemples de code pour générer dynamiquement tilemap sans avoir besoin de .tmxfichier à partir de libgdx github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/… . Merci.
haxpor
1

Sur la base des conseils de / r / gamedev , j'ai décidé de renoncer à utiliser les classes intégrées de libgdx TiledMap, etc. et de simplement créer la mienne.

Je peux entrer dans les détails si on me le demande, mais voici essentiellement ce que j'ai fait.

1: Générez un donjon en utilisant l'algorithme auquel j'étais lié à l'origine et stockez les coordonnées des tuiles (pas les coordonnées de pixels) en utilisant une Coordinateclasse que j'ai créée dans a HashMap<Coord, MapTile>. MapTileest juste une classe qui contient des données sur le type de tuile.

2: Dans la draw()fonction de ma classe principale, j'ai ajouté le code suivant

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

        }

Qui itère sur chaque Coordinatedans le dungeonMapet dessine la tuile (si la coordonnée est dans le tronc de la caméra) avec un tileSizedécalage global .

camden
la source