2010-11-04 40 views
5

Tôi đang phát triển trò chơi. Làm thế nào tôi có thể "phai" âm lượng âm thanh cho một âm thanh, dựa trên "khoảng cách" của một sprite từ hiện trường render? Giả sử tôi đã là một thế giới:Thuật toán để đặt âm lượng "âm thanh" phù hợp dựa trên khoảng cách (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 

một thuật toán tốt để "tính toán" âm lượng âm thanh là gì (và có thể sang trái/phải tỷ lệ kênh pan)? Cảm ơn bạn trước!

+0

Thư viện tôi sử dụng là SDL.NET (dựa trên obv. trên SDL) – stighy

+0

Đừng quên hiệu ứng doppler! –

Trả lời

2

Tổng Volumn

  • Có một số phương pháp tiếp cận đối với sự suy giảm của khối lượng. Ví dụ. bạn có thể sử dụng chức năng giảm xóc tuyến tính, như volume = max(0, max_volume - max_volume/max_distance * distance) hoặc chức năng có khoảng cách nghịch giảm, như volume = min(max_volume, max_volume/distance).

Ratio Cân

  • Một lần nữa, có một số phương pháp để thực hiện một chức năng đầy đủ. Trong trường hợp của bạn, bạn có thể nói, nếu đối tượng ở tại hoặc vượt ra ngoài đường viền màn hình bên trái, hãy xoay sang trái, nếu đối tượng ở hoặc bên ngoài đường viền màn hình bên phải, xoay sang phải, nếu không hãy sử dụng chức năng nội suy, ví dụ: balance = (object_x-camera_x)/screen_half_width với các giá trị nằm giữa -1: left, +1: right và 0: center.

Khi kết hợp các phương pháp tiếp cận bạn phải suy nghĩ về những gì là phù hợp cho trường hợp của bạn: Ví dụ chỉ ẩm khối lượng nếu đối tượng là ngoài giới hạn màn hình, những gì bao giờ ...

+0

Cảm ơn người đàn ông, nó hoạt động như một sự quyến rũ !! ;) – stighy

0

Vâng, âm lượng của âm thanh sẽ giảm xuống dưới dạng hình vuông của khoảng cách từ nguồn âm thanh, do đó sẽ cho bạn một nơi tốt để bắt đầu.

Biết thư viện nào bạn đang sử dụng cho trò chơi của mình sẽ hữu ích - nhiều thư viện trò chơi sẽ có sẵn chức năng này.

+0

Quảng trường? Tôi đã đoán khối lập phương, vì nó là không gian 3 chiều. Rất nhiều phụ thuộc vào cách 'khối lượng' thực sự được xác định mặc dù ... – Wrikken

+2

Hmm, thực sự. âm thanh không 'lấp đầy' một âm lượng, cũng không di chuyển bằng khối lập phương. Nó sẽ di chuyển bởi một quả cầu (các kỹ thuật đã nói ở trên như là đứng trên mặt đất/nảy vật rắn), và sống trên bề mặt ('4 PI r^2'), thật vậy. bản năng đầu tiên của tôi hoàn toàn sai, tôi đã sửa chữa. – Wrikken

2

Sử dụng khoảng cách (Dsquared = xdist^2 + ydist^2) làm yếu tố mở rộng để giảm âm lượng của bạn. Đảo ngược giá trị bình phương khoảng cách này để áp dụng trực tiếp cho âm lượng của bạn (âm lượng rơi xuống dưới dạng hình vuông khoảng cách, và khoảng cách được tính toán dễ dàng dưới dạng giá trị bình phương).

Tỷ lệ kênh trái/phải được thực hiện đơn giản bằng cách xác định hai điểm khác nhau cho kênh trái và phải (sang trái và phải, tương ứng với vị trí hiển thị của bạn), thực hiện phép tính ở trên và tìm tỷ lệ kênh của bạn theo cách đó. Bởi vì phép tính trên chỉ là tổng của hai ô vuông, nó rất đơn giản về mặt tính toán.

Các vấn đề liên quan