libgdx에서 절차 적으로 생성 된 타일을 어떻게 구현합니까?


10

libgdx에서 간단한 하향식 젤다-풍경 게임을 만들고 있는데, 이와 유사하게 절차 적으로 생성 된 타일 기반 던전을 구현하고 싶습니다 .

Libgdx에는 TiledMap이라는 클래스가있어 내 요구에 맞는 것처럼 보이지만 공식 문서 외부의 문서는 TiledMaps를 .tmx 파일 또는 다른 말로 미리 디자인 된 맵과 함께 사용할 수 있다고 제안합니다. 나는 상당한 양의 인터넷 검색을 사용하지 않았으므로 누군가가 동적으로 생성 된 타일 맵에 libgdx를 사용한 경험이 있기를 희망하는 최후의 수단으로 여기에 묻습니다.

편집 : 목표를 달성하기 위해 위의 링크와 함께 StaticTiledMapTiles 를 사용할 수 있습니까?

감사!


생성 된 맵의 데이터를 .tmx 파일에 쓰고 LibGdx에서 사용할 수 없습니까?
Dries

그 흥미 롭군요. 빠른 생성에는 이상적이지 않다고 생각하지만 가능하다고 생각합니다.
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.

이것은 나에게 아이디어를 제공합니다. 연구 결과, .tmxlibgdx github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/… 의 파일 없이도 타일 맵을 동적으로 생성하는 예제 코드를 발견 했습니다 . 감사.
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);
            }

        }

모든 반복 할 어떤 CoordinatedungeonMap와 (좌표는 카메라 프러스 텀에있는 경우) 글로벌과 타일을 그립니다 tileSize오프셋.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.