libgdxで手続き的に生成されたタイルを実装するにはどうすればよいですか?


10

私はlibgdxでシンプルなトップダウンのゼルダ風ゲームを作成しています。これと同様に、手続き的に生成されるタイルベースのダンジョンを実装したいと思います。

LibgdxにはTiledMapと呼ばれるクラスがありますが、これは私のニーズに合うようですが、公式ドキュメント以外のドキュメントでは、TiledMapsは.tmxファイル、つまり事前に設計されたマップと組み合わせてのみ使用できることを示唆しています。私はかなりの量のグーグルを実行して無駄に終わったので、動的に生成されたタイルマップにlibgdxを使用した経験がある人がいることを願って、最後の手段としてここに尋ねます。

編集:上記にリンクしたチュートリアルと組み合わせてStaticTiledMapTilesを使用して目標を達成できますか?

ありがとう!


生成されたマップのデータを.tmxファイルに書き込んで、LibGdxで使用できませんか?
ドリス

それは面白い。可能だと思いますが、それは迅速な生成には理想的ではないと思います。
camden

回答:


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.

これは私にアイデアを与えます。.tmx調べてみると、libgdxgithub.com / libgdx / libgdx / blob / master / tests / gdx - tests / src /com / からファイルを必要とせずにタイルマップを動的に生成するこれらのサンプルコードが見つかりました。ありがとう。
haxpor 2017

1

/ r / gamedevからのアドバイスに基づいて、私はlibgdxのTiledMapなどの組み込みクラスの使用を断念し、独自のクラスをビルドすることにしました。

必要に応じて詳細に進むことができますが、基本的にここで私が行ったものです。

1:最初にリンクしたアルゴリズムを使用してダンジョンを生成し、でCoordinate作成したクラスを使用してタイル座標(ピクセル座標ではない)を保存し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);
            }

        }

これは、すべての上に反復処理CoordinatedungeonMapおよびグローバルでのタイル(座標はカメラ錐台である場合)を描画tileSizeオフセットを。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.