Як я можу реалізувати процедуру, створену плиткою в libgdx?


11

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

У Libgdx є клас під назвою TiledMap, який, здавалося б, відповідає моїм потребам, проте документація поза офіційними документами дозволяє припустити, що TiledMaps можна використовувати лише в поєднанні з .tmx файлами або іншими словами заздалегідь розробленими картами. Я зробив досить багато Googling безрезультатно, тому я прошу тут в крайньому випадку сподіваючись, що хтось має досвід використання libgdx для динамічно генерованих плиткових карт.

редагувати: Чи можу я використовувати StaticTiledMapTiles спільно з підручником, з яким я пов’язаний вище, для досягнення своєї мети?

Дякую!


Чи не можете ви записати дані згенерованих карт у файл .tmx і використовувати їх у LibGdx?
Висихає

Це цікаво. Я гадаю, що міг би, хоча відчуваю, що це не було б ідеально для швидкого покоління.
camden

Відповіді:


7

Можна створювати карти з плиткою без використання .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.

1
Це дає мені уявлення. На початку дослідження я знайшов цей приклад коду для динамічного генерування плиткових карт без необхідності .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зміщенням.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.