Làm cách nào để triển khai các ô được tạo theo thủ tục trong libgdx?


10

Tôi đang tạo một trò chơi Zelda-esque đơn giản từ trên xuống trong libgdx và tôi muốn triển khai các dungeon dựa trên gạch được tạo theo thủ tục, tương tự như thế này.

Libgdx có một lớp gọi là TiledMap có vẻ phù hợp với nhu cầu của tôi, tuy nhiên tài liệu bên ngoài các tài liệu chính thức cho thấy TiledMaps chỉ có thể được sử dụng cùng với các tệp .tmx hoặc nói cách khác là các bản đồ được thiết kế sẵn. Tôi đã thực hiện một số lượng khá lớn của Google nhưng không có kết quả, vì vậy tôi hỏi ở đây như là phương sách cuối cùng với hy vọng ai đó có kinh nghiệm sử dụng libgdx cho các bản đồ ô vuông được tạo động.

chỉnh sửa: Tôi có thể sử dụng StaticTiledMapTiles kết hợp với hướng dẫn tôi đã liên kết ở trên để đạt được mục tiêu của mình không?

Cảm ơn!


Bạn có thể ghi dữ liệu của các bản đồ được tạo vào tệp .tmx và sử dụng dữ liệu đó trong LibGdx không?
Dries

Nó thật thú vị. Tôi cho rằng tôi có thể, mặc dù tôi cảm thấy như thế sẽ không lý tưởng cho thế hệ nhanh.
camden

Câu trả lời:


5

Bạn có thể tạo bản đồ lát gạch mà không cần sử dụng .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.

Điều này cho tôi một ý tưởng. Khi nghiên cứu, tôi đã tìm thấy các mã ví dụ này để tự động tạo tilemap mà không cần .tmxtệp từ libgdx github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/ . Cảm ơn.
haxpor

1

Dựa trên lời khuyên từ / r / gamedev , tôi đã quyết định từ bỏ việc sử dụng TiledMap của libgdx, v.v., và chỉ xây dựng lớp của riêng tôi.

Tôi có thể đi sâu vào chi tiết hơn nếu được yêu cầu, nhưng về cơ bản đây là những gì tôi đã làm.

1: Tạo một dungeon bằng thuật toán mà tôi đã liên kết ban đầu và lưu trữ tọa độ ô vuông (không phải là các pixel pixel) bằng cách sử dụng một Coordinatelớp tôi tạo trong a HashMap<Coord, MapTile>. MapTilechỉ là một lớp có dữ liệu về loại gạch.

2: Trong draw()chức năng của lớp chính của tôi, tôi đã thêm đoạn mã sau

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

        }

Lặp đi lặp lại trên mỗi Coordinatetrong dungeonMapvà vẽ hình xếp (nếu tọa độ nằm trong máy ảnh) với phần tileSizebù toàn cục .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.