如何在libgdx中实现按程序生成的图块?


10

我正在libgdx中创建一个简单的自上而下的Zelda式游戏,我想实现程序生成的基于图块的地牢,类似于此。

Libgdx确实有一个名为TiledMap的类,这似乎可以满足我的需求,但是官方文档之外的文档显示TiledMaps只能与.tmx文件(即预先设计的地图)一起使用。我做了很多谷歌搜索都无济于事,所以我在这里要求最后的希望是希望有人对使用libgdx进行动态生成的瓦片地图有经验。

编辑:能否将StaticTiledMapTiles与上面链接到的教程结合使用以实现我的目标?

谢谢!


您不能将生成的映射的数据写入.tmx文件并在LibGdx中使用它吗?
2013年

那很有意思。我想我可以,尽管我觉得那对于快速生成来说并不理想。
卡姆登

Answers:


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.

这给了我一个主意。经过研究,我发现这些示例代码无需libgdxgithub.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/…的.tmx文件即可动态生成tilemap。谢谢。
haxpor

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

        }

会在中的每个对象上Coordinate进行迭代,dungeonMap并使用全局tileSize偏移量绘制图块(如果坐标位于相机视锥中)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.