日誌2012-01-07 00:22
【RGSS/Ruby】不太專業的BGS遠近音量控制效果作者:解凍豬腳
#====================================================== # BGS遠近音量控制效果 by 解凍豬腳 #------------------------------------------------------ # MaxVolume : BGS最大音量 # Reduce : 距離音量差值 # Mute : 靜音範圍(離事件>=Mute則音量會被降到最小) #====================================================== MaxVolume = 100 Reduce = 8 Mute = 7 class Game_Event < Game_Character attr_reader :name attr_reader :erased alias tubobo_initialize initialize def initialize(map_id, event) tubobo_initialize(map_id, event) @name = @event.name end end class Scene_Map alias tubobo_bgs update def update tubobo_bgs plx = $game_player.x ply = $game_player.y for event in $game_map.events.values if event.name.length > 5 if event.name[0,5].downcase == "@bgs=" evx = event.x evy = event.y len = Math.hypot(plx-evx,ply-evy) bgs = event.name[5,event.name.length-5] bgsvolume = MaxVolume if len <= Mute * 0.1 and len < Mute * 0.2 bgsvolume -= Reduce * 0.5 elsif len <= Mute * 0.2 and len < Mute * 0.3 bgsvolume -= Reduce * 1.0 elsif len <= Mute * 0.3 and len < Mute * 0.4 bgsvolume -= Reduce * 1.7 elsif len <= Mute * 0.4 and len < Mute * 0.5 bgsvolume -= Reduce * 2.2 elsif len <= Mute * 0.5 and len < Mute * 0.6 bgsvolume -= Reduce * 2.7 elsif len <= Mute * 0.6 and len < Mute * 0.7 bgsvolume -= Reduce * 3.3 elsif len <= Mute * 0.7 and len < Mute * 0.8 bgsvolume -= Reduce * 3.8 elsif len <= Mute * 0.8 and len < Mute * 0.9 bgsvolume -= Reduce * 4.3 elsif len <= Mute * 0.9 and len < Mute * 1.0 bgsvolume -= Reduce * 4.9 else bgsvolume = 0 end if bgsvolume > 0 Audio.bgs_play("Audio/BGS/" + bgs, bgsvolume, 100) elsif bgsvolume < 0 Audio.bgs_play("Audio/BGS/" + bgs, 1, 100) end end end end end end class Game_Map alias tubobo_atp autoplay def autoplay Audio.bgs_stop tubobo_atp end end |
MaxVolume:這個是離物件最近時所播放的BGS音量。 Reduce:距離音量差值-- 這個比較難解釋,總之調高了,每遠離物件(音量降低一次)的降低量會提升; 反之則降低量會變小。 Mute:假設這個變數的值是N。這個值越大,每次的音效降低量會越小(與Reduce相反); 另外只要你和該物件的距離不小於N,音量就會被降到某個程度而不再改變。 |