Project1

标题: 请问如何在这个游戏暂停脚本中加入一个选项菜单 [打印本页]

作者: PIA    时间: 2014-5-26 00:26
标题: 请问如何在这个游戏暂停脚本中加入一个选项菜单
就是下面这个脚本,我想要在按下暂停键后,屏幕中心显示一个选项窗口,里面的选项是“继续游戏”和“返回标题”,再次按下暂停键窗口消失且游戏恢复正常,请问要如何修改?
  1. ###############################################################################
  2. #Pause Script Version 3                                       
  3. # Author: Unsigned_Zero
  4. # Updated by Tsukihime
  5. ###############################################################################

  6. # Pause picture should be placed in the Graphics/System folder

  7. module U0_Pause_module

  8.   PAUSE_BUTTON = "B"
  9.   Pause_Picture = "Pause"

  10.   #dim the screen during pause
  11.   Dim_Screen = false
  12.   Dim_Brightness = 100
  13.   #The bgm to play when paused
  14.   Pause_Music = "1"
  15.   #The bgm volume when paused
  16.   Pause_Volume = 0
  17.   # Freeze Time when in pause mode?
  18.   TIME_STOP = true
  19.   PAUSE_BUTTON2 = eval("Input::#{PAUSE_BUTTON}")
  20.   PAUSE_OPACITY = 255 #opacity of the picture

  21.   def stopping
  22.     bgm = RPG::BGM.last
  23.     bgs = RPG::BGS.last
  24.     prev_brightness = Graphics.brightness
  25.     RPG::BGM.stop
  26.     Audio.bgm_play('Audio/BGM/' + Pause_Music, Pause_Volume)
  27.     viewport1 = Viewport.new(0, 0, Graphics.width, Graphics.height)
  28.     viewport1.z = 10000
  29.     pause_sprite = Sprite.new(viewport1)
  30.     pause_sprite.tone = Tone.new(0, 0, 0, 0)
  31.     pause_sprite.bitmap = Cache.system (Pause_Picture)
  32.     pause_sprite.opacity = PAUSE_OPACITY
  33.     loop do
  34.       Graphics.update
  35.       Graphics.brightness = Dim_Brightness if Dim_Screen
  36.       Input.update
  37.       if Input.trigger?(PAUSE_BUTTON2)
  38.         break
  39.       end
  40.     end
  41.     Graphics.brightness = prev_brightness
  42.     bgm.play(bgm.pos)
  43.     bgs.play(bgs.pos)
  44.     pause_sprite.dispose
  45.     pause_sprite = nil
  46.   end

  47. end
  48. #==============================================================================
  49. #  Scene_Base
  50. #==============================================================================

  51. class Scene_Base
  52.   include U0_Pause_module
  53.   alias u0_pause_update update
  54.   def update
  55.     if Input.trigger?(PAUSE_BUTTON2)
  56.       frame = Graphics.frame_count
  57.       stopping
  58.       if TIME_STOP
  59.         Graphics.frame_count = frame
  60.       end
  61.     end
  62.   u0_pause_update
  63.   end
  64. end
复制代码

作者: moy    时间: 2014-5-26 02:07
本帖最后由 moy 于 2014-5-26 04:40 编辑

  1. #==============================================================================
  2. # ☆ Custom Adventure 简易暂停界面
  3. # -- Last Updated: 2014.5.26
  4. # -- by Moy
  5. # -- 转载请保留以上信息      
  6. #==============================================================================
  7. #   尽管除了module和scene_base部分已经和原来的脚本没有多大关系,还是@一下原作者
  8. # @Unsigned_Zero和更新者@Tsukihime
  9. #   顺便修复了点小bug,添加了点小功能,比如禁止循环调用,以及自由度更大的BGM和背景
  10. #==============================================================================
  11. module CA_PAUSE
  12.   PAUSE_BUTTON_NAME = "CTRL"  # 暂停控制键名
  13.   
  14.   DIM_SCREEN      = true    # 是否显示渐变
  15.   DIM_BRIGHTNESS  = 100     # 渐变强度
  16.   PAUSE_PICTURE   = "Pause" # 背景图文件名,存于System文件夹,false则截取屏幕为背景
  17.   PAUSE_OPACITY   = 255     # 背景透明度,0~255
  18.   PAUSE_DARK      = false   # 背景是否变暗
  19.   PAUSE_MUSIC     = "Airship" # BGM名,不需要更换则填false
  20.   PAUSE_VOLUME    = 100     # BGM音量,100为常值,不更换BGM也可调整
  21.   PAUSE_PITCH     = 100     # BGM音调,100为常值,不更换BGM也可调整
  22.   TIME_FREEZE     = true    # 暂停时是否冻结时间

  23.   PAUSE_BUTTON = eval("Input::#{PAUSE_BUTTON_NAME}") #暂停键的读取,可无视
  24. end
  25. #==============================================================================
  26. # ■ BattleManager
  27. #==============================================================================
  28. module BattleManager
  29.   @battle_freeze = false
  30.   def self.battle_freeze=(value); @battle_freeze = value;  end
  31.   def self.battle_freeze();       @battle_freeze;          end  
  32. end

  33. #==============================================================================
  34. # ■ Scene_Base
  35. #==============================================================================
  36. class Scene_Base
  37.   include CA_PAUSE
  38.   #--------------------------------------------------------------------------
  39.   # ● 更新画面
  40.   #--------------------------------------------------------------------------
  41.   alias ca_pause_update update
  42.   def update
  43.     if Input.trigger?(PAUSE_BUTTON)
  44.       frame = Graphics.frame_count
  45.       BattleManager.battle_freeze = true if self.is_a?(Scene_Battle)
  46.       SceneManager.call(Scene_Pause)
  47.       if TIME_FREEZE
  48.         Graphics.frame_count = frame
  49.       end
  50.     end
  51.     ca_pause_update
  52.   end
  53. end

  54. #==============================================================================
  55. # ■ Scene_Battle
  56. #==============================================================================
  57. class Scene_Battle < Scene_Base
  58.   #--------------------------------------------------------------------------
  59.   # ● 战斗开始
  60.   #--------------------------------------------------------------------------
  61.   def battle_start
  62.     BattleManager.battle_start unless BattleManager.battle_freeze
  63.     BattleManager.battle_freeze = false
  64.     process_event
  65.     start_party_command_selection
  66.   end
  67. end

  68. #==============================================================================
  69. # ■ Window_Pause
  70. #==============================================================================
  71. class Window_Pause < Window_Command
  72.   #--------------------------------------------------------------------------
  73.   # ● 初始化对象
  74.   #--------------------------------------------------------------------------
  75.   def initialize
  76.     super(0, 0)
  77.     update_placement
  78.     self.openness = 0
  79.     open
  80.   end
  81.   #--------------------------------------------------------------------------
  82.   # ● 获取窗口的宽度
  83.   #--------------------------------------------------------------------------
  84.   def window_width
  85.     return 160
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # ● 更新窗口的位置
  89.   #--------------------------------------------------------------------------
  90.   def update_placement
  91.     self.x = (Graphics.width - width) / 2
  92.     self.y = (Graphics.height - height) / 2
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ● 生成指令列表
  96.   #--------------------------------------------------------------------------
  97.   def make_command_list
  98.     add_command("返回游戏", :cancel)
  99.     add_command(Vocab::to_title, :to_title)
  100.   end
  101. end

  102. #==============================================================================
  103. # ■ Scene_Pause
  104. #==============================================================================
  105. class Scene_Pause < Scene_Base
  106.   include CA_PAUSE
  107.   #--------------------------------------------------------------------------
  108.   # ● 开始处理
  109.   #--------------------------------------------------------------------------
  110.   def start
  111.     super
  112.     play_pause_music
  113.     create_background
  114.     create_command_window
  115.   end
  116.   #--------------------------------------------------------------------------
  117.   # ● 结束处理
  118.   #--------------------------------------------------------------------------
  119.   def terminate
  120.     super
  121.     dispose_background
  122.   end
  123.   #--------------------------------------------------------------------------
  124.   # ● 执行进入场景时的渐变
  125.   #--------------------------------------------------------------------------
  126.   def perform_transition
  127.     if DIM_SCREEN
  128.       Graphics.transition(DIM_BRIGHTNESS)
  129.     else
  130.       super
  131.     end
  132.   end
  133.   #--------------------------------------------------------------------------
  134.   # ● 更新画面  避免重复调用
  135.   #--------------------------------------------------------------------------
  136.   def update
  137.     ca_pause_update
  138.   end
  139.   #--------------------------------------------------------------------------
  140.   # ● 生成背景
  141.   #--------------------------------------------------------------------------
  142.   def create_background
  143.     @background_sprite = Sprite.new
  144.     @background_sprite.bitmap = PAUSE_PICTURE ? Cache.system(PAUSE_PICTURE) : SceneManager.background_bitmap
  145.     @background_sprite.color.set(16, 16, 16, 128) if PAUSE_DARK
  146.     @background_sprite.opacity = PAUSE_OPACITY
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ● 释放背景
  150.   #--------------------------------------------------------------------------
  151.   def dispose_background
  152.     @background_sprite.dispose
  153.   end
  154.   #--------------------------------------------------------------------------
  155.   # ● 生成指令窗口
  156.   #--------------------------------------------------------------------------
  157.   def create_command_window
  158.     @command_window = Window_Pause.new
  159.     @command_window.set_handler(:cancel,    method(:return_scene))
  160.     @command_window.set_handler(:to_title,   method(:command_to_title))
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # ● 指令“返回标题”
  164.   #--------------------------------------------------------------------------
  165.   def command_to_title
  166.     close_command_window
  167.     fadeout_all
  168.     SceneManager.goto(Scene_Title)
  169.   end
  170.   #--------------------------------------------------------------------------
  171.   # ● 返回前一个场景
  172.   #--------------------------------------------------------------------------
  173.   def return_scene
  174.     play_last_music
  175.     SceneManager.return
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ● 返回前一个场景
  179.   #--------------------------------------------------------------------------
  180.   def return_scene
  181.     BattleManager.protect_environment if self.is_a?(Scene_Battle)
  182.     SceneManager.return
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   # ● 关闭指令窗口
  186.   #--------------------------------------------------------------------------
  187.   def close_command_window
  188.     @command_window.close
  189.     update until @command_window.close?
  190.   end
  191.   #--------------------------------------------------------------------------
  192.   # ● 播放暂停画面音乐
  193.   #--------------------------------------------------------------------------
  194.   def play_pause_music
  195.     @last_bgm = RPG::BGM.last
  196.     if PAUSE_MUSIC
  197.       Audio.bgm_play('Audio/BGM/' + PAUSE_MUSIC, PAUSE_VOLUME, PAUSE_PITCH)
  198.     else
  199.       Audio.bgm_play('Audio/BGM/' + @last_bgm.name , PAUSE_VOLUME, PAUSE_PITCH, @last_bgm.pos)
  200.     end
  201.     RPG::BGS.stop
  202.     RPG::ME.stop
  203.   end
  204.   #--------------------------------------------------------------------------
  205.   # ● 播放保存的音乐
  206.   #--------------------------------------------------------------------------
  207.   def play_last_music
  208.     Audio.bgm_play('Audio/BGM/' + @last_bgm.name , @last_bgm.volume, @last_bgm.pitch, @last_bgm.pos)
  209.   end
  210. end
复制代码
基本照搬默认脚本的流程,我自己纯做个复习,顺便帮你完成了。就是改的几乎没有内容了,原作者真是抱歉啊|||不过加了些功能,也修复了一些bug,可安心233.
@Unsigned_Zero @Tsukihime
[line]1[/line]
这个故事告诉我们,当你看到别人使用奇怪的方式实现一个东西的时候,总是有其原因的。(白目
作者: PIA    时间: 2014-5-26 11:52
moy 发表于 2014-5-26 02:07
基本照搬默认脚本的流程,我自己纯做个复习,顺便帮你完成了。就是改的几乎没有内容了,原作者真是抱歉啊|| ...

亲测可以使用,非常感谢!
作者: 子弹君    时间: 2014-5-26 20:26
外站看到过这个脚本,然后..就没有然后了...




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