ฉันจะใช้ไทล์ที่สร้างตามขั้นตอนใน libgdx ได้อย่างไร


11

ฉันกำลังสร้างเกม Zelda-esque บนลงล่างแบบง่าย ๆ ใน libgdx และฉันต้องการใช้ดันเจี้ยนแบบเรียงต่อกันที่สร้างตามขั้นตอนคล้ายกับสิ่งนี้

Libgdx มีคลาสที่เรียกว่า TiledMap ซึ่งดูเหมือนว่าจะเหมาะกับความต้องการของฉันอย่างไรก็ตามเอกสารนอกเอกสารอย่างเป็นทางการแสดงให้เห็นว่า TiledMaps สามารถใช้ร่วมกับไฟล์. tmx หรือในคำอื่น ๆ ที่ออกแบบไว้ล่วงหน้าแผนที่ ฉันทำ Googling ในปริมาณที่พอใช้แล้วฉันก็เลยขอให้ที่นี่เป็นทางเลือกสุดท้ายหวังว่าจะมีใครบางคนมีประสบการณ์การใช้ libgdx เพื่อสร้างแผนที่ย่อยแบบไดนามิก

แก้ไข: ฉันสามารถใช้StaticTiledMapTiles ได้หรือไม่ร่วมกับบทช่วยสอนที่ฉันเชื่อมโยงกับข้างต้นเพื่อบรรลุเป้าหมายได้หรือไม่

ขอบคุณ!


คุณไม่สามารถเขียนข้อมูลแผนที่ที่สร้างขึ้นไปยังไฟล์. tmx และใช้สิ่งนั้นใน LibGdx ได้หรือไม่?
Dries

นั่นดูน่าสนใจ. ฉันคิดว่าฉันสามารถทำได้แม้ว่าฉันจะรู้สึกว่ามันจะไม่เหมาะสำหรับการสร้างอย่างรวดเร็ว
แคมเดน

คำตอบ:


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
นี่ทำให้ฉันมีความคิด จากการค้นคว้าฉันพบรหัสตัวอย่างเหล่านี้เพื่อสร้าง tilemap แบบไดนามิกโดยไม่ต้องใช้.tmxไฟล์จาก libgdx github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/ … ขอบคุณ
haxpor

1

ตามคำแนะนำจาก/ r / gamedevฉันได้ตัดสินใจละทิ้งการใช้ TiledMap ของ libgdx และคลาสอื่น ๆ ในตัวและสร้างเพียงของฉันเอง

ฉันสามารถดูรายละเอียดเพิ่มเติมได้หากมีการร้องขอ แต่นี่คือสิ่งที่ฉันทำ

1: สร้างดันเจี้ยนโดยใช้อัลกอริทึมฉันเดิมเชื่อมโยงกับกระเบื้องและพิกัดร้าน (ไม่ coords พิกเซล) โดยใช้ระดับที่ผมทำใน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และดึงไทล์ (ถ้าพิกัดอยู่ใน frustum ของกล้อง) ด้วยtileSizeค่าชดเชยระดับโลก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.