Akan araziyi “rastgele” oluşturmanın doğru yolu


9

Basit bir yukarıdan aşağıya RTS oyunu oluşturuyorum. İhtiyacım olduğunda anında "rastgele" haritalar oluşturmayı planlıyorum. Her şeyi 'geçişlerde' planlıyorum:

  1. Araziyi tüm otlarla doldurun
  2. Geri dönün ve rastgele çakıl atakları ekleyin
  3. Çakıl yuvarla
  4. İkinci Katta Dağ Manzarası Çiz
  5. Dağları yuvarlak
  6. vesaire vesaire.

Şimdi aşağıdaki resme bir göz atın:

resim açıklamasını buraya girin

Bunu harita düzenleyicimi kullanarak oluşturdum, ancak umarım başarılı bir şekilde geçtikten / 3. adımdan sonra sonuç olmayı planlıyorum.

En azından düzensiz şekilli ve doğal görünecek kadar düzensiz olacak şekilde çakılımı ne zaman ve nasıl yerleştireceğime nasıl karar vermeliyim?

Yapabilirsen teşekkürler! Her türlü yardım takdir!

Yan not olarak:

Her geçiş temelde tüm fayanslarımda yineleniyor (Harita 40x40 döşemeye ayrılıyor) buna benzer:

for (int x = 0; x <= GRIDMAX - 1; x++) {
    for (int y = 0; y <= GRIDMAX - 1; y++) {
        //Terrain(x, y, 0) = SomethingHere;
    }
}

Yanıtlar:


5

Bir yükseklik haritası oluşturmak için Perlin Gürültü ile oynayabilirsiniz ( bir uygulama için StackOverflow cevabım bölümüne bakın ). Yükseklik haritasından, belirli yükseklik aralıklarını farklı döşemelere eşleyebilirsiniz. Gibi bir şey:

  • İlk% 20 Kar
  • Sonraki% 20 Çakıl
  • Sonraki% 40 Çim
  • Son% 20 Su

Oluşturulabilecek ve güzel görünecek bir arazi elde etmek için Perlin Gürültü jeneratör değerleriyle oynamanız gerekecek.


5

Diğerlerinin söylediği gibi, perlin gürültüsü, farklı karo türlerinin nereye yerleştirileceğine karar vermek için iyi bir veri kaynağı olmalıdır. Bu fikri tamamlamak ve yardımcı olması gereken iki ek kaynağı kontrol listenizdeki üçüncü adımla birleştirmek istiyorum - köşeleri yuvarlamak .

Bu otomatik döşeme denilen bir işlemdir ve uygulanması o kadar da zor değildir. Bunu yapmanın birçok farklı yolu vardır, ancak çoğu o konumda hangi grafiğin çizilmesi gerektiğine karar vermek için her bir karo için bitişiklik bilgisini hesaplamaya dayanır.

Bu sorunu çözmenin çok zarif bir yolu, her bitişik döşeme yönüne benzersiz bir bayrak değeri atamak ve spritehseet'inizi, bir döşemenin tüm bitişik bayraklarını bir araya getirerek elde ettiğiniz değerin, spritesheet içinde döşeme. Tekniğin çok açık bir açıklaması için bu makaleyi okuyun .

Ve işte tekniğin başka bir varyasyonunu tanımlayan başka bir kaynak .


Hey, sadece size bildirmek için, cevabınız köşeleri yuvarladığı kadar son derece yardımcı oldu. Bir ton teşekkürler :) Aslında hepsi şimdi çalışıyor (hatta köşeleri yuvarlatılmış)!
Freesnöw

4

Esasen haritalarınızı oluşturmak için Perlin Gürültü oluşturmayı kullanabilirsiniz. Oluşturulan yükseklik haritasını örneklersiniz ve haritanın belirli bir yüksekliğin üzerindeki bölümlerine çakıl blokları atarsınız.

İşte böyle bir sistemi ve üretebileceğiniz farklı arazi türlerini nasıl uygulayacağınız konusunda mükemmel bir referans yazısı.

Örneklerde ihtiyacınız olandan çok daha fazla adım var, ancak konsept aynı.

Minecraft tipi dünya genleri hakkında daha fazla bilgi

http://www.gamedev.net/blog/33/entry-2227887-more-on-minecraft-type-world-gen/

resim açıklamasını buraya girin

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.