查看: 99|回复: 0

[转载发布] 【不是创意的创意】BGM/BGS远小近大v1.0

[复制链接]
  • TA的每日心情
    开心
    前天 09:55
  • 签到天数: 37 天

    连续签到: 3 天

    [LV.5]常住居民I

    2028

    主题

    32

    回帖

    7260

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    VIP
    0
    卡币
    5184
    OK点
    16
    积分
    7260
    发表于 同元一千年八月四日(秋) | 显示全部楼层 |阅读模式
    1. #==============================================================================# BGM/BGS远小近大# 原作:沙漠点灰# 修改:精灵#==============================================================================#==============================================================================# ■ 设定部分# 所有设定部分都在这里。#==============================================================================module FAY  BGM_DURATION = 5 #BGM的减弱距离(不能为0)  BGS_DURATION = 4 #BGS的减弱距离(不能为0)  BGM_VARIABLES = 3 #BGM音乐储存变量ID  BGS_VARIABLES = 4 #BGS音乐储存变量ID  BGM_MAX = 100     #BGM最大音量(默认)  BGS_MAX = 80      #BGS最大音量(默认)  BGM_DISTANCE = 2     #最大音量保持距离  BGS_DISTANCE = 2     #最大音效保持距离end#==============================================================================# ■ Scene_Map#------------------------------------------------------------------------------#  处理地图画面的类。#==============================================================================class Scene_Map  alias _update update unless method_defined? :_update  #--------------------------------------------------------------------------  # ● 刷新画面  #--------------------------------------------------------------------------  def update    _update    check_bgm    check_bgs  end  #--------------------------------------------------------------------------  # ● 检查BGM  #--------------------------------------------------------------------------  def check_bgm    if !($bgm or $game_map.events[$bgm_event_id])      if $bgm_stop        $game_system.bgm_restore        $bgm_stop = false      end    else    bgm_x = ($game_player.x - $game_map.events[$bgm_event_id].x)**2    bgm_y = ($game_player.y - $game_map.events[$bgm_event_id].y)**2    $bgm.volume = FAY::BGM_MAX + FAY::BGM_DISTANCE * 4 -     (Math.sqrt(bgm_x+bgm_y)).round*(100/FAY::BGM_DURATION)    $bgm.volume = 0 if $bgm.volume < 0    $bgm.volume = FAY::BGM_MAX  if $bgm.volume > FAY::BGM_MAX     $game_variables[FAY::BGM_VARIABLES] = $bgm.volume    $game_system.bgm_play($bgm)    end    return  end  #--------------------------------------------------------------------------  # ● 检查BGS  #--------------------------------------------------------------------------  def check_bgs    if !($bgs or $game_map.events[$bgs_event_id])      if $bgs_stop        $game_system.bgs_restore        $bgs_stop = false      end    else    # 计算距离    bgs_x = ($game_player.x - $game_map.events[$bgs_event_id].x)**2    bgs_y = ($game_player.y - $game_map.events[$bgs_event_id].y)**2    $bgs.volume  =  FAY::BGS_MAX + FAY::BGS_DISTANCE * 4 -    (Math.sqrt(bgs_x+bgs_y)).round * (100/FAY::BGS_DURATION)    $bgs.volume = 0 if $bgs.volume < 0    $bgs.volume = FAY::BGS_MAX if $bgs.volume > FAY::BGS_MAX    $game_variables[FAY::BGS_VARIABLES] = $bgs.volume    $game_system.bgs_play($bgs)    end    return  endend#==============================================================================# ■ Interpreter (分割定义 8)#------------------------------------------------------------------------------#  执行事件命令的解释器。本类在 Game_System 类# 和 Game_Event 类的内部使用。#==============================================================================class Interpreter  #--------------------------------------------------------------------------  # ● BGM远小近大启动  #--------------------------------------------------------------------------  def bgm_d_start(bgm_id = self.instance_variable_get(:@event_id))    return if $bgm    $bgm_event_id = bgm_id    $bgm = $game_system.bgm_memorize.clone    return true  end  #--------------------------------------------------------------------------  # ●  BGM远小近大关闭  #--------------------------------------------------------------------------  def bgm_d_stop    $bgm = nil    $bgm_event_id  = nil    $bgm_stop = true    return true  end  #--------------------------------------------------------------------------  # ●  BGS远小近大启动  #--------------------------------------------------------------------------  def bgs_d_start(bgs_id = self.instance_variable_get(:@event_id))    # 演奏 BGS    return if $bgs    $bgs_event_id  = bgs_id    $bgs = $game_system.bgs_memorize.clone    return true  end  #--------------------------------------------------------------------------  # ●  BGS远小近大关闭  #--------------------------------------------------------------------------  def bgs_d_stop    $bgs = nil    $bgs_event_id = nil    $bgs_stop = true    return true  endend复制代码
    复制代码
    使用方法:
    开启此脚本:在需要的事件里写bgm_d_start(如果指定某事件就请带参数(bgm_start(你指定的事件ID))
    关闭此脚本使用bgm_d_stop /bgs_d_stop(任意事件均可,回复默认的声音大小)
    具体距离,使用变量等请在脚本设定部分设置
                 本帖来自P1论坛作者YeYe.,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=248654  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
    天天去同能,天天有童年!
    回复 论坛版权

    使用道具 举报

    ahome_bigavatar:guest
    ahome_bigavatar:welcomelogin
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|同能RPG制作大师 ( 沪ICP备12027754号-3 )

    GMT+8, 2024-5-12 22:52 , Processed in 0.046239 second(s), 43 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表