2D helikopter oyunu, koridor duvarları nasıl oluşturulur?


12

Klasik "helikopter" oyununu uyarlamaya çalışıyorum (yani http://www.addictinggames.com/helicopter.html ), ancak henüz duvar üretimi motorunun nasıl oluşturulacağını anlayamadım.

Sahte kod içine herhangi bir işaretçi? Ortadaki nesnelerle o kadar ilgilenmiyorum - sadece oyun ilerledikçe tarafları zorlukla artan bir şekilde üretme yöntemi (daha fazla kapanıyor, daha beklenmedik eğrileri var).


1
Ayrıca - açıklığa kavuşturmak için, duvarların blokludan daha kıvrımlı olmasına ihtiyacım var, çünkü aslında "su dalgaları"
olacaklar

1
sadece blok olarak yapın, ancak her biri arasında düzgün enterpolasyon yapın.
Gustavo Maciel

Yanıtlar:


17

Bunun için 1D Perlin gürültüsü kullanabilirsiniz . İşte 2D gürültünün bir görüntüsü. Kırmızı çizginin olduğu yerde örnekler aldım ve yeşil çizgiyi elde etmek için sabit bir miktarla çarptım.

1D kesitli 2D gürültü

Değerleri çarptığınız sabit, gürültünün yüksekliğini belirleyecektir. Böylece zorluğu kolayca artırabilirsiniz. Perlin gürültüsünün bir diğer yararı da, görünüşte sonsuz bir seviye oluşturabilmeniz için tileable gürültü üretebilmesidir.

Bir taban ve tavan oluşturmak istiyorsanız, geçilmez alanlar oluşturmamanız önemlidir. En kolay yol, gürültünün "üst" kısmını (ör. 1.0 - noiseValue) Tavan olarak ve alt kısmı ( noiseValue) alt kısım ( tabii ki arasında bir miktar ofset olacak şekilde) kullanmaktır. Bu çok donuk görünüyorsa, iki yakın örneği de düşünebilirsiniz. bir veya iki piksel yukarı veya aşağı başka bir kırmızı örnek çizgisi düşünün. Bu, benzer ancak aynı olmayan bir dalga verecektir.


Vay canına, bu çok yardımcı oldu! Teşekkür ederim :) Flash / Actionscript'te gelişiyorum- ve yerleşik bir perlinNoise işlevi olduğunu görüyorum ... onunla oynayacak ve nasıl gittiğini görecek :)
davidkomer

@davidkomer Bunun faydalı olduğuna sevindim. Flash'ta bir BitmapDatanesne oluşturmanız ve perlinNoiseişlevini kullanmanız gerekir. Bitmap 800x3 piksel veya aşırı bir şey olabilir, o zaman üst ve alt satır değerlerini ayıklayabilirsiniz ( aralıktaki (bitmap.getPixel(x,y) & 0xff) / 255.0değerleri size vermesi gibi bir şey 0..1.
bummzack

Hmmm- Çalıştım, ama sabit / çarpan değerleri geçilmez alanlara itiyor ... İşte benim kodum, herhangi bir fikir? (vect, perlin gürültüsü hattından örneklenmiş 32 bit değerlerin bir vektörüdür ... bu nedenle y_val, yalnızca ölçekleyici ile çarpılan mavi kanaldır) (idx = 0; idx <vect.length; idx ++) {y_val = (vect [idx] & 0xFF) * ölçekleyici; drawData.fillRect (yeni Dikdörtgen (idx, drawData.height - y_val, 1, y_val), 0x0000ff); drawData.fillRect (yeni Dikdörtgen (idx, 0, 1, y_val), 0x0000ff); }
davidkomer


Nedir scaler? Aldığınız değerler 0..255kodunuz aralığında olacaktır .
bummzack
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.