2010-11-04 25 views
5

bir oyun geliştiriyorum. Geçerli render sahnesinden bir hareketli grafiğin "uzaklığına" göre sesin ses düzeyini nasıl "azaltabilirim?"Uygun bir "ses" ses düzeyi ayarlamak için Algoritma (x, y)

WIDTH_WORLD = 10000 
HEIGHT_WORLD = 10000 

Current Scene 
xCurrent = 800 (+ Width Res. = 800 + 1024 = 1824) 
yCurrent = 400 (+ Height Res. = 400 + 768 =...) 

Far Sprite 
xSprite = 7000 
ySprite = 3000 

Ne ses düzeyini "hesaplamak" için iyi bir algoritma (ve belki tava kanal oranı sol/sağ): varsayalım i bir dünya var? Şimdiden teşekkürler! O size başlamak için iyi bir yer verecekti bu yüzden

+0

kütüphane i olduğum şey örnek sadece hacmini nemli İçin nesne ekran sınırlar dışında ise, kullanarak SDL.NET (SDL tabanlı obv.) – stighy

+0

Doppler etkisini unutmayın! –

cevap

2

Toplam Hacmi

  • hacminin azaltılması için çeşitli yaklaşımlar bulunmaktadır. Örneğin. volume = max(0, max_volume - max_volume/max_distance * distance) gibi bir doğrusal sönümleme işlevini veya volume = min(max_volume, max_volume/distance) gibi ters mesafeli düşme işlevini kullanabilirsiniz.

Denge Oranı

  • Yine, yeterli bir işlevsellik gerçekleştirmek için çeşitli yaklaşımlar vardır. Durumunuzda, eğer nesne sol ekran sınırında ya da ötesindeyse, sola doğru sola, eğer nesne sağ ekran sınırında ya da ötesindeyse, sağa doğru kaydırıyorsa, aksi takdirde bir enterpolasyon işlevi kullanın. balance = (object_x-camera_x)/screen_half_width -1: left, +1: right ve 0: center değerleri arasında.

Eğer durum için uygun olanı düşünmek zorunda bu yaklaşımları birleştirerek zaman: Hiç ...

+0

Teşekkür ederim adam, bir çekicilik gibi çalışır! ;) – stighy

0

Eh, bir sesin hacmi, ses kaynağından uzaklığın karesi olarak düşürür.

oyun olsa yararlı olacaktır için kullandığınız Ne kütüphane bilerek - Birçok oyun kütüphaneleri zaten yerleşik işlevsellik bu tür olacaktır.

+0

Kare? 3 boyutlu uzay olduğu için küp tahmin edebilirdim. Bir çok aslında 'hacmin' aslında nasıl tanımlanmış olduğuna bağlıdır ... – Wrikken

+2

Hmm, gerçekten. ses bir sesi 'doldurmaz', küp ile de gitmez. Bir küre ile (katı nesnelerin zeminde durması/sıçraması gibi yukarıda belirtilen teknikler) hareket eder ve yüzeyde (4 PI r^2') yaşar. ilk içgüdüm tamamen yanlıştı, düzelttim. – Wrikken

2

Haciminizi azaltmak için bir ölçekleme faktörü olarak uzaklığı (Dsquared = xdist^2 + ydist^2) kullanın. Bu mesafeyi doğrudan karenize uygulamak için kare değerini ters çevirin (hacim bir mesafe olarak düşüyor ve mesafe yine de kare bir değer olarak kolayca hesaplanıyor).

Sol/sağ kanal oranı, sol ve sağ kanallar için iki farklı noktanın (sırasıyla render konumunuzun soluna ve sağına) tanımlanmasıyla yapılır, yukarıdaki hesaplamayı yapın ve kanallarınızın oranlarını bulun bu şekilde. Yukarıdaki hesaplama iki karenin bir toplamı olduğu için, çok hesaplanabilir.

İlgili konular