感谢 @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的错误
截图:
脚本如下【请自动去掉解析字符】 - #==============================================================================# 本脚本来自[url=http://www.66RPG.com]www.66RPG.com[/url],使用和转载请保留此信息#==============================================================================#==============================================================================# ■ 播放BGM和ME的脚本 ver 20141127#------------------------------------------------------------------------------# 作者:精灵使者 &Ryanbarn# 用于显示正在播放的BGM和正在播放的ME(仅一次)。# 如果想分行显示(作者,轨道名)的时候,请用-分开。#==============================================================================#--------------------------------------------------------------------------# ● 设定部分#--------------------------------------------------------------------------module FAY BGM_DISPLAY_BGM = true #是否显示BGM窗口 BGM_DISPLAY_ME = true #是否显示ME BGM_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 = [] refresh end #-------------------------------------------------------------------------- # ● 刷新部分 #-------------------------------------------------------------------------- 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) end end #-------------------------------------------------------------------------- # ● 显示部分 #-------------------------------------------------------------------------- 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[i]) end def x=(x) @sprite1.x = x @sprite2.x = x end def y=(y) @sprite1.y = y @sprite2.y = y + 32 end def z=(z) @sprite1.z = z @sprite2.z = z end def 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 end end #-------------------------------------------------------------------------- # ● 释放的处理 #-------------------------------------------------------------------------- def dispose @sprite1.bitmap.dispose @sprite2.bitmap.dispose @sprite1.dispose @sprite2.dispose endend#==============================================================================# ■ Game_System#------------------------------------------------------------------------------# 系统的必要更新。# attr_accessor :playing_me 正在播放的ME#==============================================================================class Game_System attr_accessor :playing_me attr_accessor :playing_bgm alias 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) end def me_play(me) $game_system.playing_me = FAY::BGM_DISPLAY_ME ? me : nil rb_me_play_20141124(me) endend#==============================================================================# ■ Scene_Map#------------------------------------------------------------------------------# 地图的处理部分#==============================================================================class Scene_Map alias rb_main_20141122 main unless $@ def main @bgm_display = BGM_Display.new rb_main_20141122 @bgm_display.dispose end alias rb_update_20141122 update unless $@ def update @bgm_display.update rb_update_20141122 endend#==============================================================================# ■ Scene_Battle#------------------------------------------------------------------------------# 战斗的处理部分#==============================================================================class Scene_Battle alias rb_main_20141125 main unless $@ def main @bgm_display = BGM_Display.new rb_main_20141125 @bgm_display.dispose end alias rb_update_20141125 update unless $@ def update @bgm_display.update rb_update_20141125 endend#==============================================================================# ■ Scene_Battle#------------------------------------------------------------------------------# 标题画面的处理部分#==============================================================================class Scene_Title alias rb_main_20141126 main unless $@ def main @bgm_display = BGM_Display.new rb_main_20141126 @bgm_display.dispose end alias rb_update_20141126 update unless $@ def update @bgm_display.update rb_update_20141126 endend#==============================================================================# ■ Scene_Gameover#------------------------------------------------------------------------------# 结束画面的处理部分#==============================================================================class Scene_Gameover alias rb_main_20141127 main unless $@ def main @bgm_display = BGM_Display.new rb_main_20141127 @bgm_display.dispose end alias rb_update_20141127 update unless $@ def update @bgm_display.update rb_update_20141127 endend#==============================================================================# 本脚本来自[url=http://www.66RPG.com]www.66RPG.com[/url],使用和转载请保留此信息#=============================================================================复制代码
复制代码
本帖来自P1论坛作者chd114,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址: https://rpg.blue/forum.php?mod=viewthread&tid=374031 若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。 |