Project1

标题: 【不是创意的创意】BGM/BGS远小近大v1.0 [打印本页]

作者: 精灵使者    时间: 2012-9-11 14:10
标题: 【不是创意的创意】BGM/BGS远小近大v1.0
本帖最后由 精灵使者 于 2012-9-12 12:30 编辑
  1. #==============================================================================
  2. # BGM/BGS远小近大
  3. # 原作:沙漠点灰
  4. # 修改:精灵
  5. #==============================================================================
  6. #==============================================================================
  7. # ■ 设定部分
  8. # 所有设定部分都在这里。
  9. #==============================================================================
  10. module FAY
  11.   BGM_DURATION = 5 #BGM的减弱距离(不能为0)
  12.   BGS_DURATION = 4 #BGS的减弱距离(不能为0)
  13.   BGM_VARIABLES = 3 #BGM音乐储存变量ID
  14.   BGS_VARIABLES = 4 #BGS音乐储存变量ID
  15.   BGM_MAX = 100     #BGM最大音量(默认)
  16.   BGS_MAX = 80      #BGS最大音量(默认)
  17.   BGM_DISTANCE = 2     #最大音量保持距离
  18.   BGS_DISTANCE = 2     #最大音效保持距离
  19. end

  20. #==============================================================================
  21. # ■ Scene_Map
  22. #------------------------------------------------------------------------------
  23. #  处理地图画面的类。
  24. #==============================================================================

  25. class Scene_Map
  26.   alias _update update unless method_defined? :_update
  27.   #--------------------------------------------------------------------------
  28.   # ● 刷新画面
  29.   #--------------------------------------------------------------------------
  30.   def update
  31.     _update
  32.     check_bgm
  33.     check_bgs
  34.   end
  35.   #--------------------------------------------------------------------------
  36.   # ● 检查BGM
  37.   #--------------------------------------------------------------------------
  38.   def check_bgm
  39.     if !($bgm or $game_map.events[$bgm_event_id])
  40.       if $bgm_stop
  41.         $game_system.bgm_restore
  42.         $bgm_stop = false
  43.       end
  44.     else
  45.     bgm_x = ($game_player.x - $game_map.events[$bgm_event_id].x)**2
  46.     bgm_y = ($game_player.y - $game_map.events[$bgm_event_id].y)**2
  47.     $bgm.volume = FAY::BGM_MAX + FAY::BGM_DISTANCE * 4 -
  48.     (Math.sqrt(bgm_x+bgm_y)).round*(100/FAY::BGM_DURATION)
  49.     $bgm.volume = 0 if $bgm.volume < 0
  50.     $bgm.volume = FAY::BGM_MAX  if $bgm.volume > FAY::BGM_MAX
  51.     $game_variables[FAY::BGM_VARIABLES] = $bgm.volume
  52.     $game_system.bgm_play($bgm)
  53.     end
  54.     return
  55.   end
  56.   #--------------------------------------------------------------------------
  57.   # ● 检查BGS
  58.   #--------------------------------------------------------------------------
  59.   def check_bgs
  60.     if !($bgs or $game_map.events[$bgs_event_id])
  61.       if $bgs_stop
  62.         $game_system.bgs_restore
  63.         $bgs_stop = false
  64.       end
  65.     else
  66.     # 计算距离
  67.     bgs_x = ($game_player.x - $game_map.events[$bgs_event_id].x)**2
  68.     bgs_y = ($game_player.y - $game_map.events[$bgs_event_id].y)**2
  69.     $bgs.volume  =  FAY::BGS_MAX + FAY::BGS_DISTANCE * 4 -
  70.     (Math.sqrt(bgs_x+bgs_y)).round * (100/FAY::BGS_DURATION)
  71.     $bgs.volume = 0 if $bgs.volume < 0
  72.     $bgs.volume = FAY::BGS_MAX if $bgs.volume > FAY::BGS_MAX
  73.     $game_variables[FAY::BGS_VARIABLES] = $bgs.volume
  74.     $game_system.bgs_play($bgs)
  75.     end
  76.     return
  77.   end
  78. end
  79. #==============================================================================
  80. # ■ Interpreter (分割定义 8)
  81. #------------------------------------------------------------------------------
  82. #  执行事件命令的解释器。本类在 Game_System 类
  83. # 和 Game_Event 类的内部使用。
  84. #==============================================================================

  85. class Interpreter
  86.   #--------------------------------------------------------------------------
  87.   # ● BGM远小近大启动
  88.   #--------------------------------------------------------------------------
  89.   def bgm_d_start(bgm_id = self.instance_variable_get(:@event_id))
  90.     return if $bgm
  91.     $bgm_event_id = bgm_id
  92.     $bgm = $game_system.bgm_memorize.clone
  93.     return true
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   # ●  BGM远小近大关闭
  97.   #--------------------------------------------------------------------------
  98.   def bgm_d_stop
  99.     $bgm = nil
  100.     $bgm_event_id  = nil
  101.     $bgm_stop = true
  102.     return true
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # ●  BGS远小近大启动
  106.   #--------------------------------------------------------------------------
  107.   def bgs_d_start(bgs_id = self.instance_variable_get(:@event_id))
  108.     # 演奏 BGS
  109.     return if $bgs
  110.     $bgs_event_id  = bgs_id
  111.     $bgs = $game_system.bgs_memorize.clone
  112.     return true
  113.   end
  114.   #--------------------------------------------------------------------------
  115.   # ●  BGS远小近大关闭
  116.   #--------------------------------------------------------------------------
  117.   def bgs_d_stop
  118.     $bgs = nil
  119.     $bgs_event_id = nil
  120.     $bgs_stop = true
  121.     return true
  122.   end
  123. end
复制代码
使用方法:
开启此脚本:在需要的事件里写bgm_d_start(如果指定某事件就请带参数(bgm_start(你指定的事件ID))
关闭此脚本使用bgm_d_stop /bgs_d_stop(任意事件均可,回复默认的声音大小)
具体距离,使用变量等请在脚本设定部分设置
作者: YeYe.    时间: 2012-9-11 14:24
精灵真厉害~
于是沙发就是我的了!
作者: X幻夜    时间: 2012-9-11 14:56
好物 篝火之类的可以用
作者: zy625741178    时间: 2012-9-12 01:37
无法拷贝啊...喂....
作者: zy625741178    时间: 2012-9-12 12:29
............

QQ截图20120912122830.png (4.31 KB, 下载次数: 24)

QQ截图20120912122830.png

作者: zy625741178    时间: 2012-9-12 22:31
本帖最后由 zy625741178 于 2012-9-12 22:37 编辑
zy625741178 发表于 2012-9-12 12:29
............


thank you.太感谢了...但是为什么我进去房间之后动不了啊....
作者: chd114    时间: 2012-9-15 09:57
不太明白···是离某个东西越远声音越小的意思吗?》




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1