Project1

标题: 给GameOver添加菜单 [打印本页]

作者: eve592370698    时间: 2011-10-9 23:05
标题: 给GameOver添加菜单
本帖最后由 eve592370698 于 2011-10-9 23:10 编辑

以前玩小游戏有的游戏Game_Over会出现接关功能的菜单,于是我模仿标题脚本做了一个
  1. #==============================================================================
  2. # ■ Scene_Gameover
  3. #------------------------------------------------------------------------------
  4. #  处理游戏结束画面的类。
  5. #==============================================================================
  6. class Scene_Gameover
  7.   #--------------------------------------------------------------------------
  8.   # ● 主处理
  9.   #--------------------------------------------------------------------------
  10.   def main
  11.     # 生成游戏结束图形
  12.     if $game_temp.in_battle
  13.       @temp_sprite = Spriteset_Battle.new
  14.     else
  15.       @temp_sprite = Spriteset_Map.new
  16.     end
  17.     @sprite = Sprite.new
  18.     @sprite.bitmap = RPG::Cache.gameover($data_system.gameover_name)
  19.     @sprite.opacity = 0
  20.     # 停止 BGM、BGS
  21.     $game_system.bgm_play(nil)
  22.     $game_system.bgs_play(nil)
  23.     # 演奏游戏结束 ME
  24.     $game_system.me_play($data_system.gameover_me)
  25.     # 我模仿标题画面做一个图形
  26.     # 生成命令窗口
  27.     s1 = "返回继续"
  28.     s2 = "读取进度"
  29.     s3 = "返回标题"
  30.     s4 = "退出放弃"
  31.     @command_window = Window_Command.new(160, [s1, s2,s3,s4])#横着有多大
  32.     @command_window.back_opacity = 160
  33.     # 设定X和Y坐标,可以根据自己的分辨率重新设置。
  34.     @command_window.x = 320 - @command_window.width / 2
  35.     @command_window.y = 350
  36.     if @continue_enabled
  37.       @command_window.index = 1
  38.     else
  39.       @command_window.disable_item(1)
  40.     end
  41.     # 执行过渡
  42.     Graphics.transition(0)
  43.     # 主循环
  44.     for i in 0..120
  45.       @sprite.opacity +=4
  46.       Graphics.update
  47.     end
  48.     @temp_sprite.dispose
  49.     loop do
  50.       # 刷新游戏画面
  51.       Graphics.update
  52.       # 刷新输入信息
  53.       Input.update
  54.       # 刷新画面情报
  55.       update
  56.       # 如果画面被切换的话就中断循环
  57.       if $scene != self
  58.         break
  59.       end
  60.     end
  61.    
  62.     # 释放游戏结束图形
  63.     @sprite.bitmap.dispose
  64.     @sprite.dispose
  65.     # 执行过度
  66.     Graphics.transition(0)
  67.     # 准备过渡
  68.     if $BTEST
  69.       $scene = nil
  70.     end
  71.     # 释放命令窗口
  72.     @command_window.dispose
  73.     # 释放标题图形
  74.     @sprite.bitmap.dispose
  75.     @sprite.dispose
  76.   end
  77.   #--------------------------------------------------------------------------
  78.   # ● 刷新画面
  79.   #--------------------------------------------------------------------------
  80.   def update
  81.     # 刷新命令窗口
  82.     @command_window.update
  83.     # 按下 C 键的情况下
  84.     if Input.trigger?(Input::C)
  85.       # 命令窗口的光标位置的分支
  86.       case @command_window.index
  87.       when 0  # 继续
  88.         $scene = Scene_Map.new      
  89.         $game_temp.common_event_id = 14
  90.       when 1  # 读取进度
  91.         $scene = Scene_Load.new
  92.       when 2  # 返回标题
  93.         # 切换到标题画面
  94.         $scene = Scene_Title.new
  95.       when 3  # 退出
  96.         exit
  97.       end
  98.       for i in 0..30
  99.         @sprite.opacity -=10
  100.         Graphics.update
  101.       end      
  102.       
  103.     end
  104.   end
  105. end

  106. #==============================================================================
  107. # ■ Scene_End
  108. #------------------------------------------------------------------------------
  109. #  处理游戏结束画面的类。
  110. #==============================================================================

  111. class Scene_End
  112.   #--------------------------------------------------------------------------
  113.   # ● 主处理
  114.   #--------------------------------------------------------------------------
  115.   def main
  116.     # 生成命令窗口
  117.     s1 = "返回标题画面"
  118.     s2 = "退出"
  119.     s3 = "取消"
  120.     @command_window = Window_Command.new(192, [s1, s2, s3])
  121.     @command_window.x = 320 - @command_window.width / 2
  122.     @command_window.y = 240 - @command_window.height / 2
  123.     # 执行过渡
  124.     Graphics.transition
  125.     # 主循环
  126.     loop do
  127.       # 刷新游戏画面
  128.       Graphics.update
  129.       # 刷新输入情报
  130.       Input.update
  131.       # 刷新画面
  132.       update
  133.       # 如果画面切换的话就中断循环
  134.       if $scene != self
  135.         break
  136.       end
  137.     end
  138.     # 准备过渡
  139.     Graphics.freeze
  140.     # 释放窗口
  141.     @command_window.dispose
  142.     # 如果在标题画面切换中的情况下
  143.     if $scene.is_a?(Scene_Title)
  144.       # 淡入淡出画面
  145.       Graphics.transition
  146.       Graphics.freeze
  147.     end
  148.   end
  149.   #--------------------------------------------------------------------------
  150.   # ● 刷新画面
  151.   #--------------------------------------------------------------------------
  152.   def update
  153.     # 刷新命令窗口
  154.     @command_window.update
  155.     # 按下 B 键的情况下
  156.     if Input.trigger?(Input::B)
  157.       # 演奏取消 SE
  158.       $game_system.se_play($data_system.cancel_se)
  159.       # 切换到菜单画面
  160.       $scene = Scene_Menu.new(7)
  161.       return
  162.     end
  163.     # 按下 C 键的场合下
  164.     if Input.trigger?(Input::C)
  165.       # 命令窗口光标位置分支
  166.       case @command_window.index
  167.       when 0  # 返回标题画面
  168.         command_to_title
  169.       when 1  # 退出
  170.         command_shutdown
  171.       when 2  # 取消
  172.         command_cancel
  173.       end
  174.       return
  175.     end
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ● 选择命令 [返回标题画面] 时的处理
  179.   #--------------------------------------------------------------------------
  180.   def command_to_title
  181.     # 演奏确定 SE
  182.     $game_system.se_play($data_system.decision_se)
  183.     # 淡入淡出 BGM、BGS、ME
  184.     Audio.bgm_fade(800)
  185.     Audio.bgs_fade(800)
  186.     Audio.me_fade(800)
  187.     # 切换到标题画面
  188.     $scene = Scene_Title.new
  189.   end
  190.   #--------------------------------------------------------------------------
  191.   # ● 选择命令 [退出] 时的处理
  192.   #--------------------------------------------------------------------------
  193.   def command_shutdown
  194.     # 演奏确定 SE
  195.     $game_system.se_play($data_system.decision_se)
  196.     # 淡入淡出 BGM、BGS、ME
  197.     Audio.bgm_fade(800)
  198.     Audio.bgs_fade(800)
  199.     Audio.me_fade(800)
  200.     # 退出
  201.     $scene = nil
  202.   end
  203.   #--------------------------------------------------------------------------
  204.   # ● 选择命令 [取消] 时的处理
  205.   #--------------------------------------------------------------------------
  206.   def command_cancel
  207.     # 演奏确定 SE
  208.     $game_system.se_play($data_system.decision_se)
  209.     # 切换到菜单画面
  210.     $scene = Scene_Menu.new(5)
  211.   end
  212. end
复制代码
问题也跟着来了:
最大的麻烦就是选择继续游戏,执行完那个公共事件之后又Game_Over,不知道怎么回事(不是在战斗失败那个公共事件执行脚本那么简单吗?)


还有,我已经搜索过了,就vx里面的找到一个在GameOver添加菜单的那个东西,不算什么技术含量,我主要要解决的就是为啥不能实现那种类似接关的功能。dsu_plus_rewardpost_czw
作者: 各种压力的猫君    时间: 2011-10-9 23:24
本帖最后由 各种压力的猫君 于 2011-10-10 02:39 编辑

返回地图之前先
  1. $game_temp.gameover = false
复制代码
去掉Gameover的标志,否则地图刷新的时候又会转到Scene_Gameover
还真不是那么简单 =A= !我做了个VX的,你参考一下。
http://rpg.blue/thread-211634-1-1.html
主要是返回地图之后事件解释器的序列依然停在结束游戏,导致无限循环。
作者: 竹轩轩    时间: 2011-10-10 19:33
问题在于:用公共事件回血不行,用脚本强制回血就行了。 Project2.rar (187.48 KB, 下载次数: 37)


竹轩轩于2011-10-10 22:22补充以下内容:
我指的是如果用公共事件是无法解除HP=0的状态
作者: 后知后觉    时间: 2011-10-11 00:56
  1. #==============================================================================
  2. # ■ Scene_Gameover
  3. #==============================================================================

  4. class Scene_Gameover
  5.   #--------------------------------------------------------------------------
  6.   # ● 主处理
  7.   #--------------------------------------------------------------------------
  8.   def main
  9.     # 生成游戏结束图形
  10.     if $game_temp.in_battle
  11.       @temp_sprite = Spriteset_Battle.new
  12.     else
  13.       @temp_sprite = Spriteset_Map.new
  14.     end
  15.     @sprite = Sprite.new
  16.     @sprite.bitmap = RPG::Cache.gameover($data_system.gameover_name)
  17.     @sprite.opacity = 0
  18.     # 停止 BGM、BGS
  19.     $game_system.bgm_play(nil)
  20.     $game_system.bgs_play(nil)
  21.     # 演奏游戏结束 ME
  22.     $game_system.me_play($data_system.gameover_me)
  23.     # 我模仿标题画面做一个图形
  24.     # 生成命令窗口
  25.     s1 = "返回继续"
  26.     s2 = "读取进度"
  27.     s3 = "返回标题"
  28.     s4 = "退出放弃"
  29.     @command_window = Window_Command.new(160, [s1, s2,s3,s4])#横着有多大
  30.     @command_window.back_opacity = 160
  31.     # 设定X和Y坐标,可以根据自己的分辨率重新设置。
  32.     @command_window.x = 320 - @command_window.width / 2
  33.     @command_window.y = 350
  34.     @command_window.visible = false
  35.     # 执行过渡
  36.     Graphics.transition(0)
  37.     for i in 0...120
  38.       @sprite.opacity += 3
  39.       Graphics.update
  40.     end
  41.     @command_window.visible = true
  42.     @temp_sprite.dispose
  43.     # 主循环
  44.     loop do
  45.       # 刷新游戏画面
  46.       Graphics.update
  47.       # 刷新输入信息
  48.       Input.update
  49.       # 刷新画面情报
  50.       update
  51.       # 如果画面被切换的话就中断循环
  52.       if $scene != self
  53.         break
  54.       end
  55.     end
  56.     # 执行过度
  57.     Graphics.transition(0)
  58.     # 释放游戏结束图形
  59.     @sprite.bitmap.dispose
  60.     @sprite.dispose
  61.     # 释放命令窗口
  62.     @command_window.dispose
  63.     # 准备过渡
  64.     if $BTEST
  65.       $scene = nil
  66.     end
  67.   end
  68.   #--------------------------------------------------------------------------
  69.   # ● 刷新画面
  70.   #--------------------------------------------------------------------------
  71.   def update
  72.     # 刷新命令窗口
  73.     @command_window.update
  74.     # 按下 C 键的情况下
  75.     if Input.trigger?(Input::C)
  76.       # 命令窗口的光标位置的分支
  77.       case @command_window.index
  78.       when 0  # 继续
  79.         $game_temp.gameover = false
  80.         $game_temp.in_battle = false
  81.         $game_party.actors.each{|actor|actor.recover_all}
  82.         $scene = Scene_Map.new
  83.         list = $data_common_events[14].list
  84.         $game_system.map_interpreter.setup(list, 0)
  85.       when 1  # 读取进度
  86.         $scene = Scene_Load.new
  87.       when 2  # 返回标题
  88.         # 切换到标题画面
  89.         $scene = Scene_Title.new
  90.       when 3  # 退出
  91.         $scene = nil
  92.       end
  93.       @command_window.visible = false
  94.       for i in 0..30
  95.         @sprite.opacity -=10
  96.         Graphics.update
  97.       end      
  98.     end
  99.   end
  100. end
复制代码





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