设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3108|回复: 3

[原创发布] 【不是创意的创意】显示当前播放的BGM和ME ver 20141127

[复制链接]

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

发表于 2014-11-25 15:36:02 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 精灵使者 于 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的错误
截图: 截图2014-11-25.JPG
脚本如下【请自动去掉解析字符】
  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. #=============================================================================
复制代码

评分

参与人数 1星屑 +100 收起 理由
RyanBern + 100 塞糖

查看全部评分

Lv4.逐梦者 (版主)

梦石
0
星屑
9467
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

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

关于插件插入各个Scene中,其实可以不必做……

点评

脚本已经更新,设置了自动采用行数和1行的时候不进行滚动。  发表于 2014-11-25 18:55
其实我是把它拿到成品游戏的工程里测试的。  发表于 2014-11-25 18:32
另外还有一点。只要BGM和ME同时为空的话,会自动不显示本窗口  发表于 2014-11-25 18:31
做到这步其实也就可以了,不过我还是希望它的通用性更强吧,那就这样吧,挺好的  发表于 2014-11-25 18:26
三行其实就够了……P.S.只需要轨道号,曲目名,作者名就OK,只需要用分隔符分割就好  发表于 2014-11-25 18:20
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (暗夜天使)

精灵族の天使

梦石
0
星屑
1697
在线时间
3038 小时
注册时间
2007-3-16
帖子
33731

开拓者贵宾

 楼主| 发表于 2014-11-25 18:26:54 | 显示全部楼层
本帖最后由 精灵使者 于 2014-11-25 18:28 编辑

理论上是可以做到,但是标题的话没法用开关,导致脚本全局都不美观。
另外BGM和ME我改了一种模式。
当播放ME的时候如果BGM为空的话,那么则是ME模式,直到下一个BGM不为空为止。除非BGM一直不为空,那么ME显示一次。
另外战斗,标题画面和战斗失败都会有不同的BGM,所以必须要考虑。菜单之类的就可以不用插入了。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9273
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

发表于 2014-11-28 22:07:54 | 显示全部楼层
精灵使者 发表于 2014-11-25 01:26
理论上是可以做到,但是标题的话没法用开关,导致脚本全局都不美观。
另外BGM和ME我改了一种模式。
当播放M ...

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

点评

所以还是自己的工程修改起来最方便了(误)  发表于 2014-12-5 22:51
对于成品游戏无法改脚本的话比较麻烦,自己的工程的话直接开始游戏的时候初始化下开关即可  发表于 2014-12-5 22:44
总之没有最完美的办法只有相对更好的办法就对了···  发表于 2014-12-5 22:41
这样需要重新的做开关和条件控制……容易出兼容性问题  发表于 2014-12-5 22:38
选择新游戏之前用文件判断比开关方便呢?0 0  发表于 2014-12-5 21:36
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-3-28 18:05

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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