じ☆ve冰风 发表于 2024-4-19 23:12:28

【不是创意的创意】显示当前播放的BGM和ME ver 20141127

感谢 @RyanBern 的那个脚本,精灵经过大量的测试把这个给糊弄出来了,而且亲测可行。
原脚本见此链接:https://rpg.blue/thread-373864-1-1.html
精灵增添功能:
1.把Game_Temp下的东西挪到Game system下,以防止标题画面脚本异常。
2.把设定统一的写在了module类里面。
3.增加了标题画面,战斗画面,结束画面时的显示效果。
4.拉宽了窗口为了显示长的BGM名字。
5.可以自定义BGM和SE的字体颜色,还有是否显示的开关。
11.25更新:
1.修正一个方式:如果播放me的时候bgm为空的时候(这个时侯经常是放歌的时候),则一直用me的模式。否则只是用一次性模式
2.修正一个播放me出现问题的时候的失误。
3.增添新功能:BGM和ME同时为空的时候会不显示此窗口
4.增添新功能:显示行数会和分割的字符行数有关。如果当行数等于1的时候,会关闭滚动功能。
11.27更新
1.更新地图事件播放BGM,BGS的时候没法及时更新的问题。
2.发现有的时候没有代入BGM的问题,正在修正中。
11.27更新
播放完me之后没有显示BGM名称的问题,已经完美修正。
12.19更新
删去多余的行,修正F12的错误
截图:
脚本如下【请自动去掉解析字符】
#==============================================================================# 本脚本来自www.66RPG.com,使用和转载请保留此信息#==============================================================================#==============================================================================# ■ 播放BGM和ME的脚本 ver 20141127#------------------------------------------------------------------------------# 作者:精灵使者 &Ryanbarn# 用于显示正在播放的BGM和正在播放的ME(仅一次)。# 如果想分行显示(作者,轨道名)的时候,请用-分开。#==============================================================================#--------------------------------------------------------------------------# ● 设定部分#--------------------------------------------------------------------------module FAYBGM_DISPLAY_BGM = true                      #是否显示BGM窗口BGM_DISPLAY_ME = true                     #是否显示MEBGM_DISPLAY_WORDS = "BGM:"                  #BGM显示用语ME_DISPLAY_WORDS = "ME:"                  #ME显示用语BGM_DISPLAY_X = 32                        #BGM窗口位置X坐标BGM_DISPLAY_Y = 64                        #BGM窗口位置Y坐标BGM_DISPLAY_Z = 300                         #BGM窗口位置Z坐标WORD_SPLIT = /-/                            #分隔符,请修改反斜杠里里的东西WAIT_FRAME = 40                           #等待时间BGM_COLOR = Color.new(192,224,255,255)      #BGM的显示颜色BGM_NAME_COLOR = Color.new(255,255,255,255) #BGM的名字显示颜色BGM_DISPLAY_WIDTH = 500                     #BGM的宽度end#==============================================================================# ■ BGM_Display#------------------------------------------------------------------------------#  处理显示BGM的类。#==============================================================================class BGM_Display#--------------------------------------------------------------------------# ● 初始化对像#--------------------------------------------------------------------------def initialize    @bgm = nil    @me = nil    @waiting = 0    @bgm_need_refresh = false    @sprite1 = Sprite.new    @sprite2 = Sprite.new    @sprite1.bitmap = Bitmap.new(160, 32)    @sprite2.bitmap = Bitmap.new(FAY::BGM_DISPLAY_WIDTH, 224)    @sprite2.src_rect = Rect.new(0, 0, FAY::BGM_DISPLAY_WIDTH, 32)    @sprite1.visible = FAY::BGM_DISPLAY_BGM    @sprite2.visible = FAY::BGM_DISPLAY_BGM    self.x = FAY::BGM_DISPLAY_X    self.y = FAY::BGM_DISPLAY_Y    self.z = 300    @texts = []    refreshend#--------------------------------------------------------------------------# ● 刷新部分#--------------------------------------------------------------------------def refresh    @sprite1.visible = FAY::BGM_DISPLAY_BGM    @sprite2.visible = FAY::BGM_DISPLAY_BGM    if @me != nil      #播放ME      if @me.name != ""       @sprite1.bitmap.clear       @sprite1.bitmap.font.color = FAY::BGM_COLOR       @sprite1.bitmap.draw_text(0, 0, FAY::BGM_DISPLAY_WIDTH, 32, FAY::ME_DISPLAY_WORDS)       @texts = []       @texts = @me.name.split(FAY::WORD_SPLIT)      end    elsif @bgm != nil      #播放BGM      if @bgm.name != ""       @sprite1.bitmap.clear       @sprite1.bitmap.font.color = FAY::BGM_COLOR       @sprite1.bitmap.draw_text(0, 0, FAY::BGM_DISPLAY_WIDTH, 32, FAY::BGM_DISPLAY_WORDS)       @texts = []       @texts = @bgm.name.split(FAY::WORD_SPLIT)      end    else   @sprite1.bitmap.clear   @sprite2.bitmap.clear   return    end    (0 ... @texts.size).each do |i|      draw_item(i)    endend#--------------------------------------------------------------------------# ● 显示部分#--------------------------------------------------------------------------def draw_item(i)    x = 4    y = 32 * (2 * i + 1)    @sprite2.bitmap.fill_rect(x, y, FAY::BGM_DISPLAY_WIDTH, 32, Color.new(0,0,0,0))    @sprite2.bitmap.font.color = FAY::BGM_NAME_COLOR    @sprite2.bitmap.draw_text(x, y ,FAY::BGM_DISPLAY_WIDTH, 32, @texts)enddef x=(x)    @sprite1.x = x    @sprite2.x = xenddef y=(y)    @sprite1.y = y    @sprite2.y = y + 32enddef z=(z)    @sprite1.z = z    @sprite2.z = zenddef update    @sprite1.visible = FAY::BGM_DISPLAY_BGM    @sprite2.visible = FAY::BGM_DISPLAY_BGM   if $game_system.playing_me != nil      @me = $game_system.playing_me      $game_system.playing_me = nil      refresh      @sprite2.src_rect.y = @texts.size == 1 ? 32 : 0      return    end    if ($game_system.playing_bgm != @bgm or @bgm_need_refresh)      @bgm = $game_system.playing_bgm      refresh      @sprite2.src_rect.y = @texts.size == 1 ? 32 : 0      @bgm_need_refresh = false      return    end    if @texts.size == 1      if (@me != nil and @bgm != nil)      @me = nil      @bgm_need_refresh = true      refresh      end    else   if @waiting > 0       @waiting -= 1       return   end   @sprite2.src_rect.y += 1   if @sprite2.src_rect.y >= 64 * @texts.size       @sprite2.src_rect.y -= 64 * @texts.size       if (@me != nil and @bgm != nil)         @me = nil         @bgm_need_refresh = true         refresh       end   end   if @sprite2.src_rect.y % 64 == 32       @waiting = FAY::WAIT_FRAME   end    endend#--------------------------------------------------------------------------# ● 释放的处理#--------------------------------------------------------------------------def dispose    @sprite1.bitmap.dispose    @sprite2.bitmap.dispose    @sprite1.dispose    @sprite2.disposeendend#==============================================================================# ■ Game_System#------------------------------------------------------------------------------#  系统的必要更新。#   attr_accessor :playing_me正在播放的ME#==============================================================================class Game_Systemattr_accessor :playing_meattr_accessor :playing_bgmalias rb_me_play_20141124 me_play unless $@alias rb_bgm_play_20141124 bgm_play unless $@#--------------------------------------------------------------------------# ● 演奏 BGM#   bgm : 演奏的 BGM#--------------------------------------------------------------------------def bgm_play(bgm)   $game_system.playing_bgm = FAY::BGM_DISPLAY_BGM ? bgm : nil   rb_bgm_play_20141124(bgm)enddef me_play(me)    $game_system.playing_me = FAY::BGM_DISPLAY_ME ? me : nil    rb_me_play_20141124(me)endend#==============================================================================# ■ Scene_Map#------------------------------------------------------------------------------#  地图的处理部分#==============================================================================class Scene_Mapalias rb_main_20141122 main unless $@def main    @bgm_display = BGM_Display.new   rb_main_20141122    @bgm_display.disposeendalias rb_update_20141122 update unless $@def update    @bgm_display.update    rb_update_20141122endend#==============================================================================# ■ Scene_Battle#------------------------------------------------------------------------------#  战斗的处理部分#==============================================================================class Scene_Battlealias rb_main_20141125 main unless $@def main    @bgm_display = BGM_Display.new    rb_main_20141125    @bgm_display.disposeendalias rb_update_20141125 update unless $@def update    @bgm_display.update    rb_update_20141125endend#==============================================================================# ■ Scene_Battle#------------------------------------------------------------------------------#  标题画面的处理部分#==============================================================================class Scene_Titlealias rb_main_20141126 main unless $@def main    @bgm_display = BGM_Display.new   rb_main_20141126    @bgm_display.disposeendalias rb_update_20141126 update unless $@def update    @bgm_display.update    rb_update_20141126endend#==============================================================================# ■ Scene_Gameover#------------------------------------------------------------------------------#  结束画面的处理部分#==============================================================================class Scene_Gameoveralias rb_main_20141127 main unless $@def main    @bgm_display = BGM_Display.new   rb_main_20141127    @bgm_display.disposeendalias rb_update_20141127 update unless $@def update    @bgm_display.update    rb_update_20141127endend#==============================================================================# 本脚本来自www.66RPG.com,使用和转载请保留此信息#=============================================================================复制代码

             本帖来自P1论坛作者chd114,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=374031若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页: [1]
查看完整版本: 【不是创意的创意】显示当前播放的BGM和ME ver 20141127