Как бы я внедрил процедурно сгенерированные тайлы в libgdx?

10

Я создаю простую игру Zelda-esque сверху вниз в libgdx, и я хочу реализовать основанные на тайлах подземелья, которые генерируются процедурно, подобно этому.

В Libgdx есть класс TiledMap, который, как мне кажется, соответствует моим потребностям, однако документация вне официальных документов предполагает, что TiledMaps можно использовать только в сочетании с файлами .tmx или, другими словами, с заранее разработанными картами. Я провел большое количество поисков в Google, но безрезультатно, поэтому я прошу здесь, в крайнем случае, надеясь, что у кого-то есть опыт использования libgdx для динамически генерируемых карт тайлов.

Изменить: Могу ли я использовать StaticTiledMapTiles в сочетании с учебником, с которым я связан выше, для достижения моей цели?

Спасибо!

Camden
источник
Разве вы не можете записать данные сгенерированных карт в файл .tmx и использовать их в LibGdx?
высыхает
Это интересно. Я полагаю, что мог, хотя я чувствую, что это не было бы идеально для быстрого поколения.
Камден

Ответы:

5

Вы можете создавать мозаичные карты без использования .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
источник
Это дает мне идею. В процессе исследования я нашел этот пример кода для динамической генерации карты тайлов без необходимости .tmxфайла из libgdx github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/… . Спасибо.
haxpor
1

Основываясь на совете / r / gamedev , я решил отказаться от использования встроенных классов libgdx TiledMap и т. Д. И просто создать свой собственный.

Если потребуется, я могу вдаваться в подробности, но вот что я сделал, по сути.

1. Создайте подземелье, используя алгоритм, с которым я изначально связан, и сохраните координаты тайла (не координаты пикселей), используя Coordinateкласс, созданный в a HashMap<Coord, MapTile>. MapTileэто просто класс, который имеет данные о типе плитки.

2: в draw()функцию моего основного класса я добавил следующий код

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

        }

Который перебирает каждый Coordinateв dungeonMapи рисует плитку (если координата находится в усечении камеры) с глобальным tileSizeсмещением.

Camden
источник