Libgdx içinde yordamsal olarak oluşturulmuş döşemeleri nasıl uygulayabilirim?


11

Libgdx'te basit bir yukarıdan aşağı Zelda-esque oyunu oluşturuyorum ve buna benzer şekilde, prosedürel olarak oluşturulan karo tabanlı zindanları uygulamak istiyorum .

Libgdx'in TiledMap adı verilen ve ihtiyaçlarımı karşılayacak bir sınıf var, ancak resmi dokümanlar dışındaki belgeler TiledMaps'in yalnızca .tmx dosyalarıyla veya başka bir deyişle önceden tasarlanmış haritalarla kullanılabileceğini gösteriyor. Ben boşuna Googling adil bir miktar yaptım, bu yüzden burada dinamik olarak oluşturulan kiremit haritaları için libgdx kullanma deneyimi olduğunu umut son çare olarak soruyorum.

edit: Hedefime ulaşmak için yukarıda bağlı öğretici ile birlikte StaticTiledMapTiles kullanabilir miyim ?

Teşekkürler!


Oluşturulan haritaların verilerini bir .tmx dosyasına yazıp LibGdx içinde kullanamaz mısınız?
Aralık'ta kurur

İlginç. Sanırım yapabildim, ancak hızlı nesil için ideal olmayacak gibi hissediyorum.
camden

Yanıtlar:


7

.Tmx kullanmadan döşenmiş haritalar oluşturabilirsiniz.

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
Bu bana bir fikir verir. Araştırma üzerine .tmx, libgdx github.com/libgdx/libgdx/blob/master/tests/gdx-tests/src/com/… ' dan dosyaya ihtiyaç duymadan dinamik bir şekilde tilemap oluşturmak için bu örnek kodu buldum . Teşekkürler.
haxpor

1

/ R / gamedev'in tavsiyelerine dayanarak, libgdx'in TiledMap vb. Yerleşik sınıflarının kullanımını bırakmaya ve sadece kendi sınıfımı oluşturmaya karar verdim.

İstenirse daha fazla ayrıntıya girebilirim, ama işte yaptığım şey.

1: Başlangıçta bağlandığım algoritmayı kullanarak bir zindan oluşturun ve bir Coordinatesınıfta yaptığım bir sınıf kullanarak karo koordinatlarını (piksel koordinatları değil) saklayın HashMap<Coord, MapTile>. MapTileyalnızca döşeme türü hakkında veri içeren bir sınıftır.

2: draw()Ana sınıfımın işlevine aşağıdaki kodu ekledim

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

        }

Her yineler Hangi Coordinateiçinde dungeonMapve (koordinat kamera kesik ise) global ile kiremit çizer tileSizeofset.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.