Project1

标题: 【不是创意的创意】显示当前播放的BGM和ME ver 20141127 [打印本页]

作者: 精灵使者    时间: 2014-11-25 15:36
标题: 【不是创意的创意】显示当前播放的BGM和ME ver 20141127
本帖最后由 精灵使者 于 2017-10-8 02:23 编辑

感谢 @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的错误
截图:
脚本如下【请自动去掉解析字符】
  1. #==============================================================================
  2. # 本脚本来自[url=http://www.66RPG.com]www.66RPG.com[/url],使用和转载请保留此信息
  3. #==============================================================================
  4. #==============================================================================
  5. # ■ 播放BGM和ME的脚本 ver 20141127
  6. #------------------------------------------------------------------------------
  7. # 作者:精灵使者 &Ryanbarn
  8. # 用于显示正在播放的BGM和正在播放的ME(仅一次)。
  9. # 如果想分行显示(作者,轨道名)的时候,请用-分开。
  10. #==============================================================================
  11. #--------------------------------------------------------------------------
  12. # ● 设定部分
  13. #--------------------------------------------------------------------------
  14. module FAY
  15.   BGM_DISPLAY_BGM = true                      #是否显示BGM窗口
  16.   BGM_DISPLAY_ME = true                       #是否显示ME
  17.   BGM_DISPLAY_WORDS = "BGM:"                  #BGM显示用语
  18.   ME_DISPLAY_WORDS = "ME:"                    #ME显示用语
  19.   BGM_DISPLAY_X = 32                          #BGM窗口位置X坐标
  20.   BGM_DISPLAY_Y = 64                          #BGM窗口位置Y坐标
  21.   BGM_DISPLAY_Z = 300                         #BGM窗口位置Z坐标
  22.   WORD_SPLIT = /-/                            #分隔符,请修改反斜杠里里的东西
  23.   WAIT_FRAME = 40                             #等待时间
  24.   BGM_COLOR = Color.new(192,224,255,255)      #BGM的显示颜色
  25.   BGM_NAME_COLOR = Color.new(255,255,255,255) #BGM的名字显示颜色
  26.   BGM_DISPLAY_WIDTH = 500                     #BGM的宽度
  27. end
  28. #==============================================================================
  29. # ■ BGM_Display
  30. #------------------------------------------------------------------------------
  31. #  处理显示BGM的类。
  32. #==============================================================================
  33. class BGM_Display
  34.   #--------------------------------------------------------------------------
  35.   # ● 初始化对像
  36.   #--------------------------------------------------------------------------
  37.   def initialize
  38.     @bgm = nil
  39.     @me = nil
  40.     @waiting = 0
  41.     @bgm_need_refresh = false
  42.     @sprite1 = Sprite.new
  43.     @sprite2 = Sprite.new
  44.     @sprite1.bitmap = Bitmap.new(160, 32)
  45.     @sprite2.bitmap = Bitmap.new(FAY::BGM_DISPLAY_WIDTH, 224)
  46.     @sprite2.src_rect = Rect.new(0, 0, FAY::BGM_DISPLAY_WIDTH, 32)
  47.     @sprite1.visible = FAY::BGM_DISPLAY_BGM
  48.     @sprite2.visible = FAY::BGM_DISPLAY_BGM
  49.     self.x = FAY::BGM_DISPLAY_X
  50.     self.y = FAY::BGM_DISPLAY_Y
  51.     self.z = 300
  52.     @texts = []
  53.     refresh
  54.   end
  55.   #--------------------------------------------------------------------------
  56.   # ● 刷新部分
  57.   #--------------------------------------------------------------------------
  58.   def refresh
  59.     @sprite1.visible = FAY::BGM_DISPLAY_BGM
  60.     @sprite2.visible = FAY::BGM_DISPLAY_BGM
  61.     if @me != nil
  62.       #播放ME
  63.       if @me.name != ""
  64.        @sprite1.bitmap.clear
  65.        @sprite1.bitmap.font.color = FAY::BGM_COLOR
  66.        @sprite1.bitmap.draw_text(0, 0, FAY::BGM_DISPLAY_WIDTH, 32, FAY::ME_DISPLAY_WORDS)
  67.        @texts = []
  68.        @texts = @me.name.split(FAY::WORD_SPLIT)
  69.       end
  70.     elsif @bgm != nil
  71.       #播放BGM
  72.       if @bgm.name != ""
  73.        @sprite1.bitmap.clear
  74.        @sprite1.bitmap.font.color = FAY::BGM_COLOR
  75.        @sprite1.bitmap.draw_text(0, 0, FAY::BGM_DISPLAY_WIDTH, 32, FAY::BGM_DISPLAY_WORDS)
  76.        @texts = []
  77.        @texts = @bgm.name.split(FAY::WORD_SPLIT)
  78.       end
  79.     else
  80.      @sprite1.bitmap.clear
  81.      @sprite2.bitmap.clear
  82.      return
  83.     end
  84.     (0 ... @texts.size).each do |i|
  85.       draw_item(i)
  86.     end
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ● 显示部分
  90.   #--------------------------------------------------------------------------
  91.   def draw_item(i)
  92.     x = 4
  93.     y = 32 * (2 * i + 1)
  94.     @sprite2.bitmap.fill_rect(x, y, FAY::BGM_DISPLAY_WIDTH, 32, Color.new(0,0,0,0))
  95.     @sprite2.bitmap.font.color = FAY::BGM_NAME_COLOR
  96.     @sprite2.bitmap.draw_text(x, y ,FAY::BGM_DISPLAY_WIDTH, 32, @texts[i])
  97.   end
  98.   def x=(x)
  99.     @sprite1.x = x
  100.     @sprite2.x = x
  101.   end
  102.   def y=(y)
  103.     @sprite1.y = y
  104.     @sprite2.y = y + 32
  105.   end
  106.   def z=(z)
  107.     @sprite1.z = z
  108.     @sprite2.z = z
  109.   end
  110.   def update
  111.     @sprite1.visible = FAY::BGM_DISPLAY_BGM
  112.     @sprite2.visible = FAY::BGM_DISPLAY_BGM
  113.     if $game_system.playing_me != nil
  114.       @me = $game_system.playing_me
  115.       $game_system.playing_me = nil
  116.       refresh
  117.       @sprite2.src_rect.y = @texts.size == 1 ? 32 : 0
  118.       return
  119.     end
  120.     if ($game_system.playing_bgm != @bgm or @bgm_need_refresh)
  121.       @bgm = $game_system.playing_bgm
  122.       refresh
  123.       @sprite2.src_rect.y = @texts.size == 1 ? 32 : 0
  124.       @bgm_need_refresh = false
  125.       return
  126.     end
  127.     if @texts.size == 1
  128.       if (@me != nil and @bgm != nil)
  129.         @me = nil
  130.         @bgm_need_refresh = true
  131.         refresh
  132.       end
  133.     else
  134.      if @waiting > 0
  135.        @waiting -= 1
  136.        return
  137.      end
  138.      @sprite2.src_rect.y += 1
  139.      if @sprite2.src_rect.y >= 64 * @texts.size
  140.        @sprite2.src_rect.y -= 64 * @texts.size
  141.        if (@me != nil and @bgm != nil)
  142.          @me = nil
  143.          @bgm_need_refresh = true
  144.          refresh
  145.        end
  146.      end
  147.      if @sprite2.src_rect.y % 64 == 32
  148.        @waiting = FAY::WAIT_FRAME
  149.      end
  150.     end
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ● 释放的处理
  154.   #--------------------------------------------------------------------------
  155.   def dispose
  156.     @sprite1.bitmap.dispose
  157.     @sprite2.bitmap.dispose
  158.     @sprite1.dispose
  159.     @sprite2.dispose
  160.   end
  161. end

  162. #==============================================================================
  163. # ■ Game_System
  164. #------------------------------------------------------------------------------
  165. #  系统的必要更新。
  166. #   attr_accessor :playing_me  正在播放的ME
  167. #==============================================================================
  168. class Game_System
  169.   attr_accessor :playing_me
  170.   attr_accessor :playing_bgm
  171.   alias rb_me_play_20141124 me_play unless $@
  172.   alias rb_bgm_play_20141124 bgm_play unless $@
  173.   #--------------------------------------------------------------------------
  174.   # ● 演奏 BGM
  175.   #     bgm : 演奏的 BGM
  176.   #--------------------------------------------------------------------------
  177.   def bgm_play(bgm)
  178.    $game_system.playing_bgm = FAY::BGM_DISPLAY_BGM ? bgm : nil
  179.    rb_bgm_play_20141124(bgm)
  180.   end
  181.   def me_play(me)
  182.     $game_system.playing_me = FAY::BGM_DISPLAY_ME ? me : nil
  183.     rb_me_play_20141124(me)
  184.   end
  185. end

  186. #==============================================================================
  187. # ■ Scene_Map
  188. #------------------------------------------------------------------------------
  189. #  地图的处理部分
  190. #==============================================================================
  191. class Scene_Map
  192.   alias rb_main_20141122 main unless $@
  193.   def main
  194.     @bgm_display = BGM_Display.new
  195.     rb_main_20141122
  196.     @bgm_display.dispose
  197.   end
  198.   alias rb_update_20141122 update unless $@
  199.   def update
  200.     @bgm_display.update
  201.     rb_update_20141122
  202.   end
  203. end

  204. #==============================================================================
  205. # ■ Scene_Battle
  206. #------------------------------------------------------------------------------
  207. #  战斗的处理部分
  208. #==============================================================================
  209. class Scene_Battle
  210.   alias rb_main_20141125 main unless $@
  211.   def main
  212.     @bgm_display = BGM_Display.new
  213.     rb_main_20141125
  214.     @bgm_display.dispose
  215.   end
  216.   alias rb_update_20141125 update unless $@
  217.   def update
  218.     @bgm_display.update
  219.     rb_update_20141125
  220.   end
  221. end

  222. #==============================================================================
  223. # ■ Scene_Battle
  224. #------------------------------------------------------------------------------
  225. #  标题画面的处理部分
  226. #==============================================================================
  227. class Scene_Title
  228.   alias rb_main_20141126 main unless $@
  229.   def main
  230.     @bgm_display = BGM_Display.new
  231.     rb_main_20141126
  232.     @bgm_display.dispose
  233.   end
  234.   alias rb_update_20141126 update unless $@
  235.   def update
  236.     @bgm_display.update
  237.     rb_update_20141126
  238.   end
  239. end

  240. #==============================================================================
  241. # ■ Scene_Gameover
  242. #------------------------------------------------------------------------------
  243. #  结束画面的处理部分
  244. #==============================================================================
  245. class Scene_Gameover
  246.   alias rb_main_20141127 main unless $@
  247.   def main
  248.     @bgm_display = BGM_Display.new
  249.     rb_main_20141127
  250.     @bgm_display.dispose
  251.   end
  252.   alias rb_update_20141127 update unless $@
  253.   def update
  254.     @bgm_display.update
  255.     rb_update_20141127
  256.   end
  257. end
  258. #==============================================================================
  259. # 本脚本来自[url=http://www.66RPG.com]www.66RPG.com[/url],使用和转载请保留此信息
  260. #=============================================================================
复制代码


作者: RyanBern    时间: 2014-11-25 17:50
还是很不错的,希望能增添Scene_Map中有关开关的设定(即打开开关1就显示,当然,标题还要在处理一下)。
还有要注意的就是,那个音乐的详细信息只能显示3行……这个应该算是不完善的地方吧。

关于插件插入各个Scene中,其实可以不必做……
作者: 精灵使者    时间: 2014-11-25 18:26
本帖最后由 精灵使者 于 2014-11-25 18:28 编辑

理论上是可以做到,但是标题的话没法用开关,导致脚本全局都不美观。
另外BGM和ME我改了一种模式。
当播放ME的时候如果BGM为空的话,那么则是ME模式,直到下一个BGM不为空为止。除非BGM一直不为空,那么ME显示一次。
另外战斗,标题画面和战斗失败都会有不同的BGM,所以必须要考虑。菜单之类的就可以不用插入了。
作者: chd114    时间: 2014-11-28 22:07
精灵使者 发表于 2014-11-25 01:26
理论上是可以做到,但是标题的话没法用开关,导致脚本全局都不美观。
另外BGM和ME我改了一种模式。
当播放M ...

开关不行的话用其他方法试试看?比如判断某个文件是否存在或者读取某个文件里的信息?我去年的坑里面的设置里就是读取某文件里的信息和改变里面的信息达到修改菜单显示方式(文字/图案)的效果的···




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