Project1

标题: 新人请教一个问题:播放任意bgm音乐的脚本代码是什么? [打印本页]

作者: 飞翔的小鸟3    时间: 2013-11-2 23:33
标题: 新人请教一个问题:播放任意bgm音乐的脚本代码是什么?
本帖最后由 飞翔的小鸟3 于 2013-11-3 00:46 编辑

各位前辈,是这样的:
前几天在ACE的提问区偶然发现有人提问“ 怎么在游戏中更换标题bgm? ”(地址,这位的问题已经解决了:http://rpg.blue/thread-336928-1-2.html
于是我就忽然来了兴致,我可以说是脚本还没入门(那个VX的脚本入门已经看完了,可还不怎么熟练。ACE的是日文,看也看不懂...),所以写脚本一路磕磕碰碰的。

下面来说一下我的思路吧:

外观上:
我想在游戏标题加一个”更换Bgm“按钮,按下去弹出一个窗口:标有”下一首“,”上一首“,”保存当前音乐“,”返回“。
这就是基本的窗口框架了。


脚本上:
(窗口,按键什么的就不说了...)
1.设定$a为所要供玩家选择播放的BGM音乐总数量
2.设定@b为当前所播放音乐序号
3.”下一首“分歧:
  当玩家按下”下一首“时,若@b不为1,即不等于第一首BGM,
    那么@b+1,即播放第二首;
  当玩家按下”下一首“时,若@b为$a,即最后一首BGM,
    那么@b的值变为1,即播放第一首BGM。
4.”上一首“分歧:
  当玩家按下“上一首”时,若@b不为1,即第一首BGM,
    那么@b-1,即播放上一首BGM;
  当玩家按下”上一首“时,若@b为1,即第一首BGM,
    那么@b的值变为$a,即播放最后一首BGM 。

现在问题来了,上述脚本很容易实现,但是要怎么才能播放 BGM 呢?
最初我是用: Audio.bgm_play(filename[, volume[, pitch[, pos]]]) 方法。
我先用数组建一个要播放的所有BGM文件名称总汇,如下:
  1.     bgmname = [
  2.                "Theme1","Theme2","Theme3","Theme4","Theme5"
  3.                ]
复制代码
然后,由于我想在VX中,数组可以这样用:
  1. a=[
  2.    "b","c","d"
  3.    ]
  4. p a[0] --->显示b
复制代码
所以我想是不是可以把BGM名称写入一个数组,然后使用
  1. a[@a]
复制代码
来得到音乐名称呢?
于是我就如下写了:
  1.     filename = a[@a]
  2.     Audio.bgm_play(filename,[ 100,[ 70,[ 0]]])
复制代码
可是结果...报错...
图片等我升级了就上传......
嗯,就是问这个代码要怎么弄?顺便问一下思路对不对?顺便说一下,那个”保存当前BGM“是偶然看到:
Game_System的
  1.   #--------------------------------------------------------------------------
  2.   # ● 保存 BGM
  3.   #--------------------------------------------------------------------------
  4.   def save_bgm
  5.     @saved_bgm = RPG::BGM.last
  6.   end
复制代码
我想这个是保存当前BGM到存档的 吧?这样下次打开游戏就不用再换一次了?(所以我就顺便写下来了)
额,就这样了。
也许这个脚本在前辈们看来是太幼稚了,但鉴于我是刚入门(刚开始 写这个脚本的时候由于不熟悉ACE,我连怎么返回上一个窗口都弄了半天...),各位前辈还请多多指教啊!
作者: 喵呜喵5    时间: 2013-11-3 00:35
本帖最后由 喵呜喵5 于 2013-11-3 00:37 编辑

Audio.bgm_play(filename,100,70,0)即可
大括号的意思表示后面几个参数已经有了默认的定义值所以偷懒的话这几个参数可省略…………
因此使用Audio.bgm_play(filename)也是可以播放BGM的(只是音量、音调默认设置成了100,BGM从头开始播放而已……)
作者: 喵呜喵5    时间: 2013-11-3 00:49
顺便说一下,你那个换歌窗口利用取余可以做的更简便一些:
脚本上:
1.设定@a为所要供玩家选择播放的BGM文件名数组包含的元素个数(Array.size)
2.设定@b = 0 为当前所播放音乐序号
3.按键分歧:
  当玩家按下”下一首“时,@b += 1
       当玩家按下“上一首”时,@b -= 1
       @b %= @a
4.播放音乐      
       播放数组索引中文件名为@b的BGM
作者: 飞翔的小鸟3    时间: 2013-11-3 09:13
本帖最后由 飞翔的小鸟3 于 2013-11-3 09:25 编辑
喵呜喵5 发表于 2013-11-3 00:35
Audio.bgm_play(filename,100,70,0)即可
大括号的意思表示后面几个参数已经有了默认的定义值所以偷懒的话这 ...


谢谢这位前辈了,我弄好了。
但想问问为什么播放后一直是第一首和最后一首?
我想可能也就只有@b的值被固定为1了?这个是怎么回事?我不是把@ b 的值去运算了吗?
下面是我的场景类中自己写的脚本:(前辈那个简化的方法有点看不懂...抱歉...)
RUBY 代码复制
  1. class Scene_Changebgm<Scene_Base
  2.   $ALLBGMMAX = 5
  3.   $NOWBGM    = 1
  4. #开始处理
  5.   def start
  6.     super
  7.     @changebgm = Bgm_change.new(0,0)
  8.     create_background
  9.     create_command_window
  10.   end
  11. #结束处理
  12.   def terminate
  13.     super
  14.     @changebgm.dispose
  15.     dispose_background
  16.     close_command_window
  17.   end
  18. #生成背景
  19.   def create_background
  20.     @background_sprite = Sprite.new
  21.     @background_sprite.bitmap = SceneManager.background_bitmap
  22.     @background_sprite.color.set(0, 0, 0, 128)
  23.   end
  24. #释放背景
  25.   def dispose_background
  26.     @background_sprite.dispose
  27.   end
  28. #生成窗口指令
  29.   def create_command_window
  30.   @changebgm.set_handler(:biaoti, method(:biaotiback))
  31.   @changebgm.set_handler(:last, method(:last))
  32.   @changebgm.set_handler(:next, method(:next))
  33.   @changebgm.set_handler(:savemusic, method(:savemusic))
  34.   end
  35. #关闭窗口指令
  36.   def close_command_window
  37.     @changebgm.dispose
  38.   end
  39. #返回标题画面
  40.   def biaotiback
  41.     SceneManager.return
  42.   end
  43. #上一首
  44.   def last
  45.     if $NOWBGM != 1
  46.       $NOWBGM - 1
  47.     else $NOWBGM = 1
  48.       $NOWBGM = $ALLBGMMAX
  49.     end
  50.     playbgm
  51.   end
  52. #下一首
  53.   def next
  54.     if $NOWBGM != $ALLBGMMAX
  55.       $NOWBGM + 1
  56.     else $NOWBGM = $ALLBGMMAX
  57.       $NOWBGM = 1
  58.     end
  59.     playbgm
  60.   end
  61. #播放音乐
  62.   def playbgm
  63.     bgmname = [
  64.                "","Audio/BGM/Theme1","Audio/BGM/Theme2","Audio/BGM/Theme3",
  65.                "Audio/BGM/Theme4","Audio/BGM/Theme5"
  66.                ]
  67.     Audio.bgm_stop
  68.     filename = bgmname[$NOWBGM]
  69.     Audio.bgm_play(filename,100,70,0)
  70.     SceneManager.goto(Scene_Changebgm)
  71.   end
  72. #保存当前音乐(这个莫名其妙,好像没用?)
  73.   def savemusic
  74.     @game_system = Game_System.new
  75.     @game_system.save_bgm
  76.     Sound.play_save
  77.     SceneManager.return
  78.   end
  79. end


注:
我的脚本大多是在原脚本上修改的,所以下面是我在原脚本中定义的一些代码(用###夹起来的代码):

Vocab模块
RUBY 代码复制
  1. module Vocab
  2. ############################下面
  3.   Changebgm       = "更换bgm"
  4.   Next            = "下一首"
  5.   Last            = "上一首"
  6.   Backbiaoti      = "返回标题"
  7.   Onbgm           = "选择音乐"
  8.   Savemusic       = "保存音乐"
  9. ##############################上面
  10. end



Window_TitleCommand类
RUBY 代码复制
  1. class Window_TitleCommand < Window_Command
  2.   #--------------------------------------------------------------------------
  3.   # ● 初始化对象
  4.   #--------------------------------------------------------------------------
  5.   def initialize
  6.     super(0, 0)
  7.     update_placement
  8.     select_symbol(:continue) if continue_enabled
  9.     self.openness = 0
  10.     open
  11.   end
  12.   #--------------------------------------------------------------------------
  13.   # ● 获取窗口的宽度
  14.   #--------------------------------------------------------------------------
  15.   def window_width
  16.     return 160
  17.   end
  18.   #--------------------------------------------------------------------------
  19.   # ● 更新窗口的位置
  20.   #--------------------------------------------------------------------------
  21.   def update_placement
  22.     self.x = (Graphics.width - width) / 2
  23.     self.y = (Graphics.height * 1.6 - height) / 2
  24.   end
  25.   #--------------------------------------------------------------------------
  26.   # ● 生成指令列表
  27.   #--------------------------------------------------------------------------
  28.   def make_command_list
  29.     add_command(Vocab::new_game, :new_game)
  30.     add_command(Vocab::continue, :continue, continue_enabled)
  31. #############################################下面
  32.     add_command(Vocab::Changebgm,:changebgm)
  33. ###############################################上面
  34.     add_command(Vocab::shutdown, :shutdown)
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ● 获取“继续游戏”选项是否有效
  38.   #--------------------------------------------------------------------------
  39.   def continue_enabled
  40.     DataManager.save_file_exists?
  41.   end
  42. end




一个window类的简单窗口
RUBY 代码复制
  1. class Bgm_change<Window_Command
  2. #####################################下面
  3.   def initialize(x,y)
  4.     super
  5.     self.openness = 0
  6.     open
  7.   end
  8.   def make_command_list
  9.     add_command(Vocab::Backbiaoti, :biaoti)
  10.     add_command(Vocab::Last, :last)
  11.     add_command(Vocab::Next, :next)
  12.     add_command(Vocab::Savemusic, :savemusic)
  13.   end
  14. end
  15. ##########################################上面




Scene_Title类
RUBY 代码复制
  1. class Scene_Title < Scene_Base
  2.   #--------------------------------------------------------------------------
  3.   # ● 开始处理
  4.   #--------------------------------------------------------------------------
  5.   def start
  6.     super
  7.     SceneManager.clear
  8.     Graphics.freeze
  9.     create_background
  10.     create_foreground
  11.     create_command_window
  12.     play_title_music
  13.   end
  14.   #--------------------------------------------------------------------------
  15.   # ● 获取渐变速度
  16.   #--------------------------------------------------------------------------
  17.   def transition_speed
  18.     return 20
  19.   end
  20.   #--------------------------------------------------------------------------
  21.   # ● 结束处理
  22.   #--------------------------------------------------------------------------
  23.   def terminate
  24.     super
  25.     SceneManager.snapshot_for_background
  26.     dispose_background
  27.     dispose_foreground
  28.   end
  29.   #--------------------------------------------------------------------------
  30.   # ● 生成背景
  31.   #--------------------------------------------------------------------------
  32.   def create_background
  33.     @sprite1 = Sprite.new
  34.     @sprite1.bitmap = Cache.title1($data_system.title1_name)
  35.     @sprite2 = Sprite.new
  36.     @sprite2.bitmap = Cache.title2($data_system.title2_name)
  37.     center_sprite(@sprite1)
  38.     center_sprite(@sprite2)
  39.   end
  40.   #--------------------------------------------------------------------------
  41.   # ● 生成背景(gai)
  42.   #--------------------------------------------------------------------------
  43.   def create_background
  44.     beijing = rand(3)
  45.     case beijing
  46.       when 0
  47.         @beijingtwo = "Book"
  48.       when 1
  49.         @beijingtwo = "Castle"
  50.       when 2
  51.         @beijingtwo = "CrossedSwords"
  52.     end
  53.     @sprite1 = Sprite.new
  54.     @sprite1.bitmap = Cache.title1($data_system.title1_name)
  55.     @sprite1.bitmap = Cache.title1(@beijingtwo)
  56.     @sprite2 = Sprite.new
  57.     @sprite2.bitmap = Cache.title2($data_system.title2_name)
  58.     center_sprite(@sprite1)
  59.     center_sprite(@sprite2)
  60.   end
  61.  
  62.   #--------------------------------------------------------------------------
  63.   # ● 生成前景
  64.   #--------------------------------------------------------------------------
  65.   def create_foreground
  66.     @foreground_sprite = Sprite.new
  67.     @foreground_sprite.bitmap = Bitmap.new(Graphics.width, Graphics.height)
  68.     @foreground_sprite.z = 100
  69.     draw_game_title if $data_system.opt_draw_title
  70.   end
  71.   #--------------------------------------------------------------------------
  72.   # ● 绘制游戏标题
  73.   #--------------------------------------------------------------------------
  74.   def draw_game_title
  75.     @foreground_sprite.bitmap.font.size = 48
  76.     rect = Rect.new(0, 0, Graphics.width, Graphics.height / 2)
  77.     @foreground_sprite.bitmap.draw_text(rect, $data_system.game_title, 1)
  78.   end
  79.   #--------------------------------------------------------------------------
  80.   # ● 释放背景
  81.   #--------------------------------------------------------------------------
  82.   def dispose_background
  83.     @sprite1.bitmap.dispose
  84.     @sprite1.dispose
  85.     @sprite2.bitmap.dispose
  86.     @sprite2.dispose
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ● 释放前景
  90.   #--------------------------------------------------------------------------
  91.   def dispose_foreground
  92.     @foreground_sprite.bitmap.dispose
  93.     @foreground_sprite.dispose
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   # ● 执行精灵居中
  97.   #--------------------------------------------------------------------------
  98.   def center_sprite(sprite)
  99.     sprite.ox = sprite.bitmap.width / 2
  100.     sprite.oy = sprite.bitmap.height / 2
  101.     sprite.x = Graphics.width / 2
  102.     sprite.y = Graphics.height / 2
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # ● 生成指令窗口
  106.   #--------------------------------------------------------------------------
  107.   def create_command_window
  108.     @command_window = Window_TitleCommand.new
  109.     @command_window.set_handler(:new_game, method(:command_new_game))
  110.     @command_window.set_handler(:continue, method(:command_continue))
  111.     @command_window.set_handler(:shutdown, method(:command_shutdown))
  112. #################################################下面
  113.    @command_window.set_handler(:changebgm, method(:command_changebgm_open))
  114. ################################################上面
  115.   end
  116. #################################################下面
  117.   def command_changebgm_open
  118.     SceneManager.call(Scene_Changebgm)
  119.     @command_window.close
  120.   end
  121. ##################################################上面
  122.   #--------------------------------------------------------------------------
  123.   # ● 关闭指令窗口
  124.   #--------------------------------------------------------------------------
  125.   def close_command_window
  126.     @command_window.close
  127.     update until @command_window.close?
  128.   end
  129.   #--------------------------------------------------------------------------
  130.   #
  131.   def command_changebgm
  132.     @changebgm = Bgm_change.new(0,0)
  133.   end
  134.   #--------------------------------------------------------------------------
  135.   # ● 指令“开始游戏”
  136.   #--------------------------------------------------------------------------
  137.   def command_new_game
  138.     DataManager.setup_new_game
  139.     close_command_window
  140.     fadeout_all
  141.     $game_map.autoplay
  142.     SceneManager.goto(Scene_Map)
  143.   end
  144.   #--------------------------------------------------------------------------
  145.   # ● 指令“继续游戏”
  146.   #--------------------------------------------------------------------------
  147.   def command_continue
  148.     close_command_window
  149.     SceneManager.call(Scene_Load)
  150.   end
  151.   #--------------------------------------------------------------------------
  152.   # ● 指令“退出游戏”
  153.   #--------------------------------------------------------------------------
  154.   def command_shutdown
  155.     close_command_window
  156.     fadeout_all
  157.     SceneManager.exit
  158.   end
  159.   #--------------------------------------------------------------------------
  160.   # ● 播放标题画面音乐
  161.   #--------------------------------------------------------------------------
  162.   def play_title_music
  163.     $data_system.title_bgm.play
  164.     RPG::BGS.stop
  165.     RPG::ME.stop
  166.   end
  167. end




可能有点乱....我等等看看再改改排版....
作者: 余烬之中    时间: 2013-11-3 09:27
飞翔的小鸟3 发表于 2013-11-3 09:13
谢谢这位前辈了,我弄好了。
但想问问为什么播放后一直是第一首和最后一首?
我想可能也就只有@b的值被固 ...

Scene_Changebgm 46行和55行
类似于$NOWBGM + 1的地方
改为$NOWBGM += 1
之前你只是加上,表达式的值改变了,变量还是原来的样子
要赋值

Scene_Title 177
RUBY 代码复制
  1. def command_changebgm_open
  2.     SceneManager.call(Scene_Changebgm)
  3.     @command_window.close
  4.   end

改为
RUBY 代码复制
  1. def command_changebgm_open
  2.     SceneManager.call(Scene_Changebgm)
  3.   end

场景转换不需要关闭窗口

Vocab不建议使用Next
next好像就是一个保留字还是关键字什么的…………
作者: 飞翔的小鸟3    时间: 2013-11-3 10:07
余烬之中 发表于 2013-11-3 09:27
Scene_Changebgm 46行和55行
类似于$NOWBGM + 1的地方
改为$NOWBGM += 1

谢谢前辈的不吝赐教,又弄好了。
再厚脸皮问一个问题:怎么实现保存当前背景音乐呢?我那个不是保存的方法......
这个要用像存档这样的方式吗?
作者: 喵呜喵5    时间: 2013-11-3 10:12
这个具体要看你想要实现怎样的保存效果,请描述的清楚一些……
作者: 飞翔的小鸟3    时间: 2013-11-3 10:19
喵呜喵5 发表于 2013-11-3 10:12
这个具体要看你想要实现怎样的保存效果,请描述的清楚一些……

前辈你好,我是想按下“保存BGM”键时,把当前播放的背景音乐保存到数据库里面,这样当下一次打开游戏时,播放的就是上一次自己选的BGM了。类似于在按F9弹出的数据库中----->系统------>改标题画面的音乐。
作者: 余烬之中    时间: 2013-11-3 10:26
飞翔的小鸟3 发表于 2013-11-3 10:07
谢谢前辈的不吝赐教,又弄好了。
再厚脸皮问一个问题:怎么实现保存当前背景音乐呢?我那个不是保存的方 ...


作者: 飞翔的小鸟3    时间: 2013-11-3 10:40
本帖最后由 飞翔的小鸟3 于 2013-11-3 10:41 编辑
余烬之中 发表于 2013-11-3 10:26
  • Scene_Changebgm
  •   def playbgm


  • 前辈,这里要做个说明:
    1.
    1. SceneManager.goto(Scene_Changebgm)
    复制代码
    我本来也没用,但是结果BGM音乐播放出来了,窗口却卡住了。如下:

    2.
    1. $data_system.title_bgm = bgmname[$NOWBGM]
    复制代码
    这个代码最初我也是想到了并且用了,但是:

    报错...上图是用前辈给的代码结果报错的情况。
    作者: 余烬之中    时间: 2013-11-3 11:10
    飞翔的小鸟3 发表于 2013-11-3 10:40
    前辈,这里要做个说明:
    1.我本来也没用,但是结果BGM音乐播放出来了,窗口却卡住了。如下:

  • Scene_Changebgm
    RUBY 代码复制
    1. class Scene_Changebgm < Scene_Base
    2. #开始处理
    3.   def start
    4.     super
    5.     @changebgm = Bgm_change.new(0,0)
    6.     create_background
    7.     create_command_window
    8.     @ALLBGMMAX = 5
    9.     @NOWBGM    = 1
    10.     @bgmname = ["","Theme1","Theme2","Theme3","Theme4","Theme5"]
    11.   end
    12. #结束处理
    13.   def terminate
    14.     super
    15.     @changebgm.dispose
    16.     dispose_background
    17.     close_command_window
    18.   end
    19. #生成背景
    20.   def create_background
    21.     @background_sprite = Sprite.new
    22.     @background_sprite.bitmap = SceneManager.background_bitmap
    23.     @background_sprite.color.set(0, 0, 0, 128)
    24.   end
    25. #释放背景
    26.   def dispose_background
    27.     @background_sprite.dispose
    28.   end
    29. #生成窗口指令
    30.   def create_command_window
    31.   @changebgm.set_handler(:biaoti, method(:return_scene))
    32.   @changebgm.set_handler(:last, method(:last))
    33.   @changebgm.set_handler(:next, method(:next))
    34.   @changebgm.set_handler(:savemusic, method(:savemusic))
    35.   end
    36. #关闭窗口指令
    37.   def close_command_window
    38.     @changebgm.dispose
    39.   end
    40. #上一首
    41.   def last
    42.     if @NOWBGM != 1
    43.       @NOWBGM -= 1
    44.     elsif @NOWBGM = 1
    45.       @NOWBGM = @ALLBGMMAX
    46.     end
    47.     playbgm
    48.   end
    49. #下一首
    50.   def next
    51.     if @NOWBGM != @ALLBGMMAX
    52.       @NOWBGM += 1
    53.     elsif @NOWBGM = @ALLBGMMAX
    54.       @NOWBGM = 1
    55.     end
    56.     playbgm
    57.   end
    58. #播放音乐
    59.   def playbgm
    60.  
    61.     Audio.bgm_stop
    62.     Audio.bgm_play("Audio/BGM/#{@bgmname[@NOWBGM]}",100,70,0)
    63.   end
    64. #保存当前音乐
    65.   def savemusic
    66.     $data_system.title_bgm = RPG::BGM.new(@bgmname[@NOWBGM])
    67.     save_data($data_system, "Data/System.rvdata2")
    68.     Sound.play_save
    69.     return_scene
    70.   end
    71. end

  • class Bgm_change
    RUBY 代码复制
    1. class Bgm_change < Window_Command
    2.   def initialize(x,y)
    3.     super
    4.     self.openness = 0
    5.     open
    6.   end
    7.   def make_command_list
    8.     add_command(Vocab::Backbiaoti, :biaoti)
    9.     add_command(Vocab::Last, :last)
    10.     add_command(Vocab::Next, :next)
    11.     add_command(Vocab::Savemusic, :savemusic)
    12.   end
    13.   def process_ok
    14.     super
    15.     activate
    16.   end
    17. end

  • Scene_Title
    RUBY 代码复制
    1. #encoding:utf-8
    2. #==============================================================================
    3. # ■ Scene_Title
    4. #------------------------------------------------------------------------------
    5. #  标题画面
    6. #==============================================================================
    7.  
    8. class Scene_Title < Scene_Base
    9.   #--------------------------------------------------------------------------
    10.   # ● 开始处理
    11.   #--------------------------------------------------------------------------
    12.   def start
    13.     super
    14.     SceneManager.clear
    15.     Graphics.freeze
    16.     create_background
    17.     create_foreground
    18.     create_command_window
    19.     play_title_music
    20.   end
    21.   #--------------------------------------------------------------------------
    22.   # ● 获取渐变速度
    23.   #--------------------------------------------------------------------------
    24.   def transition_speed
    25.     return 20
    26.   end
    27.   #--------------------------------------------------------------------------
    28.   # ● 结束处理
    29.   #--------------------------------------------------------------------------
    30.   def terminate
    31.     super
    32.     SceneManager.snapshot_for_background
    33.     dispose_background
    34.     dispose_foreground
    35.   end
    36.   #--------------------------------------------------------------------------
    37.   # ● 生成背景
    38.   #--------------------------------------------------------------------------
    39.   def create_background
    40.     @sprite1 = Sprite.new
    41.     @sprite1.bitmap = Cache.title1($data_system.title1_name)
    42.     @sprite2 = Sprite.new
    43.     @sprite2.bitmap = Cache.title2($data_system.title2_name)
    44.     center_sprite(@sprite1)
    45.     center_sprite(@sprite2)
    46.   end
    47.   #--------------------------------------------------------------------------
    48.   # ● 生成背景(gai)
    49.   #--------------------------------------------------------------------------
    50.   def create_background
    51.     beijing = rand(3)
    52.     case beijing
    53.       when 0
    54.         @beijingtwo = "Book"
    55.       when 1
    56.         @beijingtwo = "Castle"
    57.       when 2
    58.         @beijingtwo = "CrossedSwords"
    59.     end
    60.     @sprite1 = Sprite.new
    61.     @sprite1.bitmap = Cache.title1($data_system.title1_name)
    62.     @sprite1.bitmap = Cache.title1(@beijingtwo)
    63.     @sprite2 = Sprite.new
    64.     @sprite2.bitmap = Cache.title2($data_system.title2_name)
    65.     center_sprite(@sprite1)
    66.     center_sprite(@sprite2)
    67.   end
    68.  
    69.   #--------------------------------------------------------------------------
    70.   # ● 生成前景
    71.   #--------------------------------------------------------------------------
    72.   def create_foreground
    73.     @foreground_sprite = Sprite.new
    74.     @foreground_sprite.bitmap = Bitmap.new(Graphics.width, Graphics.height)
    75.     @foreground_sprite.z = 100
    76.     draw_game_title if $data_system.opt_draw_title
    77.   end
    78.   #--------------------------------------------------------------------------
    79.   # ● 绘制游戏标题
    80.   #--------------------------------------------------------------------------
    81.   def draw_game_title
    82.     @foreground_sprite.bitmap.font.size = 48
    83.     rect = Rect.new(0, 0, Graphics.width, Graphics.height / 2)
    84.     @foreground_sprite.bitmap.draw_text(rect, $data_system.game_title, 1)
    85.   end
    86.   #--------------------------------------------------------------------------
    87.   # ● 释放背景
    88.   #--------------------------------------------------------------------------
    89.   def dispose_background
    90.     @sprite1.bitmap.dispose
    91.     @sprite1.dispose
    92.     @sprite2.bitmap.dispose
    93.     @sprite2.dispose
    94.   end
    95.   #--------------------------------------------------------------------------
    96.   # ● 释放前景
    97.   #--------------------------------------------------------------------------
    98.   def dispose_foreground
    99.     @foreground_sprite.bitmap.dispose
    100.     @foreground_sprite.dispose
    101.   end
    102.   #--------------------------------------------------------------------------
    103.   # ● 执行精灵居中
    104.   #--------------------------------------------------------------------------
    105.   def center_sprite(sprite)
    106.     sprite.ox = sprite.bitmap.width / 2
    107.     sprite.oy = sprite.bitmap.height / 2
    108.     sprite.x = Graphics.width / 2
    109.     sprite.y = Graphics.height / 2
    110.   end
    111.   #--------------------------------------------------------------------------
    112.   # ● 生成指令窗口
    113.   #--------------------------------------------------------------------------
    114.   def create_command_window
    115.     @command_window = Window_TitleCommand.new
    116.     @command_window.set_handler(:new_game, method(:command_new_game))
    117.     @command_window.set_handler(:continue, method(:command_continue))
    118.     @command_window.set_handler(:shutdown, method(:command_shutdown))
    119.     @command_window.set_handler(:changebgm, method(:command_changebgm_open))
    120.   end
    121.   #--------------------------------------------------------------------------
    122.   # ● 指令“更改BGM”
    123.   #--------------------------------------------------------------------------
    124.   def command_changebgm_open
    125.     SceneManager.call(Scene_Changebgm)
    126.   end
    127.   #--------------------------------------------------------------------------
    128.   # ● 关闭指令窗口
    129.   #--------------------------------------------------------------------------
    130.   def close_command_window
    131.     @command_window.close
    132.     update until @command_window.close?
    133.   end
    134.   #--------------------------------------------------------------------------
    135.   # ● 指令“开始游戏”
    136.   #--------------------------------------------------------------------------
    137.   def command_new_game
    138.     DataManager.setup_new_game
    139.     close_command_window
    140.     fadeout_all
    141.     $game_map.autoplay
    142.     SceneManager.goto(Scene_Map)
    143.   end
    144.   #--------------------------------------------------------------------------
    145.   # ● 指令“继续游戏”
    146.   #--------------------------------------------------------------------------
    147.   def command_continue
    148.     close_command_window
    149.     SceneManager.call(Scene_Load)
    150.   end
    151.   #--------------------------------------------------------------------------
    152.   # ● 指令“退出游戏”
    153.   #--------------------------------------------------------------------------
    154.   def command_shutdown
    155.     close_command_window
    156.     fadeout_all
    157.     SceneManager.exit
    158.   end
    159.   #--------------------------------------------------------------------------
    160.   # ● 播放标题画面音乐
    161.   #--------------------------------------------------------------------------
    162.   def play_title_music
    163.     $data_system.title_bgm.play
    164.     RPG::BGS.stop
    165.     RPG::ME.stop
    166.   end
    167. end

  • Window_TitleCommand
    RUBY 代码复制
    1. #encoding:utf-8
    2. #==============================================================================
    3. # ■ Window_TitleCommand
    4. #------------------------------------------------------------------------------
    5. #  标题画面中,选择“开始游戏/继续游戏”的窗口。
    6. #==============================================================================
    7.  
    8. class Window_TitleCommand < Window_Command
    9.   #--------------------------------------------------------------------------
    10.   # ● 初始化对象
    11.   #--------------------------------------------------------------------------
    12.   def initialize
    13.     super(0, 0)
    14.     update_placement
    15.     select_symbol(:continue) if continue_enabled
    16.     self.openness = 0
    17.     open
    18.   end
    19.   #--------------------------------------------------------------------------
    20.   # ● 获取窗口的宽度
    21.   #--------------------------------------------------------------------------
    22.   def window_width
    23.     return 160
    24.   end
    25.   #--------------------------------------------------------------------------
    26.   # ● 更新窗口的位置
    27.   #--------------------------------------------------------------------------
    28.   def update_placement
    29.     self.x = (Graphics.width - width) / 2
    30.     self.y = (Graphics.height * 1.6 - height) / 2
    31.   end
    32.   #--------------------------------------------------------------------------
    33.   # ● 生成指令列表
    34.   #--------------------------------------------------------------------------
    35.   def make_command_list
    36.     add_command(Vocab::new_game, :new_game)
    37.     add_command(Vocab::continue, :continue, continue_enabled)
    38.     add_command(Vocab::Changebgm,:changebgm)
    39.     add_command(Vocab::shutdown, :shutdown)
    40.   end
    41.   #--------------------------------------------------------------------------
    42.   # ● 获取“继续游戏”选项是否有效
    43.   #--------------------------------------------------------------------------
    44.   def continue_enabled
    45.     DataManager.save_file_exists?
    46.   end
    47. end
  • Vocab没有修改
    作者: 飞翔的小鸟3    时间: 2013-11-3 11:49
    余烬之中 发表于 2013-11-3 11:10
  • Scene_Changebgm
    class Scene_Changebgm < Scene_Base
    #开始处理

  • 谢谢!真的谢谢你们!!
    余烬之中,还有喵呜喵5前辈!
    在此向你们辛勤的帮助以示感谢。我的问题已经得到了很好的解决,虽然这个脚本真的很无聊,但我还是得到了你们的真诚相助,我再次表示感谢!
    嗯,问题解决了,我可以改为“已经解决”了吧?




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