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

Project1

 找回密码
 注册会员
搜索
查看: 2242|回复: 11
打印 上一主题 下一主题

[已经解决] 请问这个脚本怎样加入别的脚本中

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
57
在线时间
161 小时
注册时间
2011-2-2
帖子
469
跳转到指定楼层
1
发表于 2011-2-7 00:14:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 坚强的羁绊 于 2011-2-7 14:18 编辑
  1. #==============================================================================
  2. # ■ 存取档合并脚本
  3. #------------------------------------------------------------------------------
  4. # BY:美兽
  5. #插入main之前,地图呼出方式$scene = Scene_Loadsave.new,主菜单里默认的也是该界面
  6. #不与默认的存取档功能冲突,方便个别地方只需存或者取的功能,虽然很简单,实际做起
  7. #来,考虑的地方还是比较多。 
  8. #==============================================================================
  9. #==============================================================================
  10. # ■ Scene_Load
  11. #------------------------------------------------------------------------------
  12. #  处理读档画面的类。
  13. #==============================================================================

  14. class Scene_Load < Scene_File
  15.   #--------------------------------------------------------------------------
  16.   # ● 初始化对像
  17.   #--------------------------------------------------------------------------
  18.   def initialize
  19.     # 再生成临时对像
  20.     $game_temp = Game_Temp.new
  21.     # 选择存档时间最新的文件
  22.     $game_temp.last_file_index = 0
  23.     latest_time = Time.at(0)
  24.     for i in 0..3
  25.       filename = make_filename(i)
  26.       if FileTest.exist?(filename)
  27.         file = File.open(filename, "r")
  28.         if file.mtime > latest_time
  29.           latest_time = file.mtime
  30.           $game_temp.last_file_index = i
  31.         end
  32.         file.close
  33.       end
  34.     end
  35.     super("要载入哪个文件?")
  36.   end
  37.   #--------------------------------------------------------------------------
  38.   # ● 确定时的处理
  39.   #--------------------------------------------------------------------------
  40.   def on_decision(filename)
  41.     # 文件不存在的情况下
  42.     unless FileTest.exist?(filename)
  43.       # 演奏冻结 SE
  44.       $game_system.se_play($data_system.buzzer_se)
  45.       return
  46.     end
  47.     $menu_call = false
  48.     # 演奏读档 SE
  49.     $game_system.se_play($data_system.load_se)
  50.     # 写入存档数据
  51.     file = File.open(filename, "rb")
  52.     read_save_data(file)
  53.     file.close
  54.     # 还原 BGM、BGS
  55.     $game_system.bgm_play($game_system.playing_bgm)
  56.     $game_system.bgs_play($game_system.playing_bgs)
  57.     # 刷新地图 (执行并行事件)
  58.     $game_map.update
  59.     # 切换到地图画面
  60.     $scene = Scene_Map.new
  61.   end
  62.   #--------------------------------------------------------------------------
  63.   # ● 取消时的处理
  64.   #--------------------------------------------------------------------------
  65.   def on_cancel
  66.     # 演奏取消 SE
  67.     $game_system.se_play($data_system.cancel_se)
  68.     # 切换到标题画面
  69.     $scene = Scene_Title.new
  70.   end
  71.   #--------------------------------------------------------------------------
  72.   # ● 读取存档数据
  73.   #     file : 读取用文件对像 (已经打开)
  74.   #--------------------------------------------------------------------------
  75.   def read_save_data(file)
  76.     # 读取描绘存档文件用的角色数据
  77.     characters = Marshal.load(file)
  78.     # 读取测量游戏时间用画面计数
  79.     Graphics.frame_count = Marshal.load(file)
  80.     # 读取各种游戏对像
  81.     $game_system        = Marshal.load(file)
  82.     $game_switches      = Marshal.load(file)
  83.     $game_variables     = Marshal.load(file)
  84.     $game_self_switches = Marshal.load(file)
  85.     $game_screen        = Marshal.load(file)
  86.     $game_actors        = Marshal.load(file)
  87.     $game_party         = Marshal.load(file)
  88.     $game_troop         = Marshal.load(file)
  89.     $game_map           = Marshal.load(file)
  90.     $game_player        = Marshal.load(file)
  91.     # 魔法编号与保存时有差异的情况下
  92.     # (加入编辑器的编辑过的数据)
  93.     if $game_system.magic_number != $data_system.magic_number
  94.       # 重新装载地图
  95.       $game_map.setup($game_map.map_id)
  96.       $game_player.center($game_player.x, $game_player.y)
  97.     end
  98.     # 刷新同伴成员
  99.     $game_party.refresh
  100.   end
  101. end
  102. #==============================================================================
  103. # ■ Window_LoadHelp
  104. #------------------------------------------------------------------------------
  105. #  存取档画面帮助信息的显示窗口。
  106. #==============================================================================

  107. class Window_LoadHelp < Window_Base
  108. #--------------------------------------------------------------------------
  109. #  初始化对象
  110. #--------------------------------------------------------------------------
  111. def initialize
  112.   super(0, 0, 320, 64)
  113.   self.contents = Bitmap.new(width - 32, height - 32)
  114.   self.contents.font.name = "黑体"
  115.   self.contents.font.size = 18
  116. end
  117. #--------------------------------------------------------------------------
  118. #  刷新文本
  119. #--------------------------------------------------------------------------
  120. def set_text(text, align = 1)
  121.   if text != @text or align != @align
  122.     self.contents.clear
  123.     self.contents.font.color = normal_color
  124.     self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
  125.     @text = text
  126.     @align = align
  127.     @actor = nil
  128.   end
  129.   self.visible = true
  130. end
  131. end
  132. #==============================================================================
  133. #  Window_LoadCommand
  134. #------------------------------------------------------------------------------
  135. #  存取档画面选择按钮窗口
  136. #==============================================================================

  137. class Window_LoadCommand < Window_Selectable
  138. #--------------------------------------------------------------------------
  139. #  初始化对象
  140. #--------------------------------------------------------------------------
  141. def initialize
  142.   super(320, 0, 320, 64)
  143.   self.contents = Bitmap.new(width - 32, height - 32)
  144.   self.contents.font.name = "黑体"
  145.   self.contents.font.size = 18
  146.   @item_max = 2
  147.   @column_max = 2
  148.   @commands = ["读取", "存储"]
  149.   refresh
  150.   self.index = 0
  151. end
  152. #--------------------------------------------------------------------------
  153. #  刷新
  154. #--------------------------------------------------------------------------
  155. def refresh
  156.   self.contents.clear
  157.   for i in 0...@item_max
  158.     draw_item(i)
  159.   end
  160. end
  161. #--------------------------------------------------------------------------
  162. #  描画按钮文字
  163. #--------------------------------------------------------------------------
  164. def draw_item(index)
  165.   x = 4 + index * 160
  166.   self.contents.draw_text(x, 0, 144, 32, @commands[index])
  167. end
  168. #--------------------------------------------------------------------------
  169. # ● 项目无效化
  170. #     index : 项目编号
  171. #--------------------------------------------------------------------------
  172.   def disable_item(index)
  173.     draw_item(index, disabled_color)
  174.   end

  175. end

  176. #==============================================================================
  177. # ■ Scene_Menu
  178. #------------------------------------------------------------------------------
  179. #  处理菜单画面的类。
  180. #==============================================================================

  181. class Scene_Menu
  182.   #--------------------------------------------------------------------------
  183.   # ● 初始化对像
  184.   #     menu_index : 命令光标的初期位置
  185.   #--------------------------------------------------------------------------
  186.   def initialize(menu_index = 0)
  187.     @menu_index = menu_index
  188.   end
  189.   #--------------------------------------------------------------------------
  190.   # ● 主处理
  191.   #--------------------------------------------------------------------------
  192.   def main
  193.     @spriteset = Spriteset_Map.new
  194.     # 生成命令窗口
  195.     s1 = $data_system.words.item
  196.     s2 = $data_system.words.skill
  197.     s3 = $data_system.words.equip
  198.     s4 = "状态"
  199.     s5 = "记录"
  200.     s6 = "任务"
  201.     s7 = "队列"
  202.     s8 = "结束"
  203.     @cmd = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7, s8])
  204.     @cmd.index = @menu_index
  205.     # 同伴人数为 0 的情况下
  206.     if $game_party.actors.size == 0
  207.       # 物品、特技、装备、状态无效化
  208.       @cmd.disable_item(0)
  209.       @cmd.disable_item(1)
  210.       @cmd.disable_item(2)
  211.       @cmd.disable_item(3)
  212.     end
  213.     # 生成游戏时间窗口
  214.     @playtime_window = Window_PlayTime.new
  215.     @playtime_window.x = 0
  216.     @playtime_window.y = 320
  217.     # 生成步数窗口
  218.     #@steps_window = Window_Steps.new
  219.     #@steps_window.x = 0
  220.     #@steps_window.y = 320
  221.     # 生成金钱窗口
  222.     @gold_window = Window_Gold.new
  223.     @gold_window.x = 0
  224.     @gold_window.y = 416
  225.     # 生成状态窗口
  226.     @status_window = Window_MenuStatus.new
  227.     @status_window.x = 160
  228.     @status_window.y = 0
  229.     # 执行过渡
  230.     Graphics.transition
  231.     # 主循环
  232.     loop do
  233.       # 刷新游戏画面
  234.       Graphics.update
  235.       # 刷新输入信息
  236.       Input.update
  237.       # 刷新画面
  238.       update
  239.       # 如果切换画面就中断循环
  240.       if $scene != self
  241.         break
  242.       end
  243.     end
  244.     # 准备过渡
  245.     Graphics.freeze
  246.     # 释放窗口
  247.     @cmd.dispose
  248.     @playtime_window.dispose
  249.     @spriteset.dispose
  250. #    @steps_window.dispose
  251.     @gold_window.dispose
  252.     @status_window.dispose
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # ● 刷新画面
  256.   #--------------------------------------------------------------------------
  257.   def update
  258.     # 刷新窗口
  259.     @cmd.update
  260.     @playtime_window.update
  261.     #@steps_window.update
  262.     @gold_window.update
  263.     @status_window.update
  264.     # 命令窗口被激活的情况下: 调用 update_command
  265.     if @cmd.active
  266.       update_command
  267.       return
  268.     end
  269.     # 状态窗口被激活的情况下: 调用 update_status
  270.     if @status_window.active
  271.       update_status
  272.       return
  273.     end
  274.   end
  275.   #--------------------------------------------------------------------------
  276.   # ● 刷新画面 (命令窗口被激活的情况下)
  277.   #--------------------------------------------------------------------------
  278.   def update_command
  279.     # 按下 B 键的情况下
  280.     if Input.trigger?(Input::B)
  281.       # 演奏取消 SE
  282.       $game_system.se_play($data_system.cancel_se)
  283.       # 切换的地图画面
  284.       $scene = Scene_Map.new
  285.       return
  286.     end
  287.     # 按下 C 键的情况下
  288.     if Input.trigger?(Input::C)
  289.       # 同伴人数为 0、存档、游戏结束以外的场合
  290.       if $game_party.actors.size == 0 and @cmd.index < 4
  291.         # 演奏冻结 SE
  292.         $game_system.se_play($data_system.buzzer_se)
  293.         return
  294.       end
  295.       # 命令窗口的光标位置分支
  296.       case @cmd.index
  297.       when 0  # 物品
  298.         # 演奏确定 SE
  299.         $game_system.se_play($data_system.decision_se)
  300.         # 切换到物品画面
  301.         $scene = Scene_Item.new
  302.       when 1  # 特技
  303.         # 演奏确定 SE
  304.         $game_system.se_play($data_system.decision_se)
  305.         # 激活状态窗口
  306.         @cmd.active = false
  307.         @status_window.active = true
  308.         @status_window.index = 0
  309.       when 2  # 装备
  310.         # 演奏确定 SE
  311.         $game_system.se_play($data_system.decision_se)
  312.         # 激活状态窗口
  313.         @cmd.active = false
  314.         @status_window.active = true
  315.         @status_window.index = 0
  316.       when 3  # 状态
  317.         # 演奏确定 SE
  318.         $game_system.se_play($data_system.decision_se)
  319.         # 激活状态窗口
  320.         @cmd.active = false
  321.         @status_window.active = true
  322.         @status_window.index = 0
  323.       when 4  # 记录
  324.         # 演奏确定 SE
  325.         $game_system.se_play($data_system.decision_se)
  326.         # 切换到存取档画面
  327.         $menu_call = true
  328.         $scene = Scene_Loadsave.new
  329.       when 5  # 任务
  330.         # 演奏确定 SE
  331.         $game_system.se_play($data_system.decision_se)
  332.         # 切换到任务画面
  333.         $scene = Scene_Task.new
  334.       when 6 # 队列
  335.         # 演奏确定 SE
  336.         $game_system.se_play($data_system.decision_se)
  337.         #切换到队列画面
  338.         $scene = Scene_Change_Turn.new
  339.       end
  340.       return
  341.     end
  342.   end
  343.   end
  344. #==============================================================================
  345. #  Scene_Loadsave
  346. #------------------------------------------------------------------------------
  347. # 处理存取档画面的类。
  348. #==============================================================================

  349. class Scene_Loadsave
  350. #--------------------------------------------------------------------------
  351. # ● 初始化对像
  352. #     $last_savefile_index : 记录光标位置
  353. #--------------------------------------------------------------------------
  354. def initialize
  355.   $last_savefile_index = 0 if $last_savefile_index == nil
  356. end
  357. #--------------------------------------------------------------------------
  358. #  主处理
  359. #--------------------------------------------------------------------------
  360. def main
  361.   @savestate = 0
  362.   # 生成窗口
  363.   @help_window = Window_LoadHelp.new
  364.   @help_window.set_text("请选择.")
  365.   @option_window = Window_LoadCommand.new
  366.   @savefile_windows = []
  367.   for i in 0..3
  368.     @savefile_windows.push(Window_SaveFile.new(i, make_filename(i)))
  369.   end
  370.   @option_window.index = $last_savefile_index
  371.   @file_index = 0
  372.   # 执行过渡
  373.   Graphics.transition
  374.   # 主循环
  375.   loop do
  376.     # 刷新游戏画面
  377.     Graphics.update
  378.     # 刷新输入信息
  379.     Input.update
  380.     # 刷新画面
  381.     update
  382.     # 如果画面被切换的话就中断循环
  383.     if $scene != self
  384.       break
  385.     end
  386.   end
  387.   # 准备过渡
  388.   Graphics.freeze
  389.   # 释放窗口
  390.   @help_window.dispose
  391.   @option_window.dispose
  392.   for i in @savefile_windows
  393.     i.dispose
  394.   end
  395. end

  396. #--------------------------------------------------------------------------
  397. #  ● 刷新画面
  398. #--------------------------------------------------------------------------
  399. def update
  400.   # 刷新窗口
  401.   @help_window.update
  402.   @option_window.update
  403.   for i in @savefile_windows
  404.     i.update
  405.   end
  406.   
  407.   case @savestate
  408.   when 0
  409.       if Input.trigger?(Input::B)
  410.       $game_system.se_play($data_system.cancel_se)
  411.       # 淡入淡出 BGM
  412.       Audio.bgm_fade(800)
  413.       # 返回地图
  414.       if $menu_call == false
  415.       # 切换到地图画面
  416.       $scene = Scene_Map.new
  417.         return
  418.       end
  419.       # 切换到菜单画面
  420.       $menu_call = false
  421.       $scene = Scene_Menu.new(4)
  422.    end
  423.     if Input.trigger?(Input::C)
  424.       case @option_window.index
  425.       when 0
  426.         @savefile_windows[@file_index].selected = true
  427.         @option_window.active = false
  428.         @help_window.set_text("请选择一个文件进行读取.")
  429.         @savestate  = 1
  430.         return
  431.       when 1
  432.         @savefile_windows[@file_index].selected = true
  433.         @option_window.active = false
  434.         @help_window.set_text("请选择一个文件进行存储.")
  435.         @savestate = 2
  436.         return
  437.         return
  438.       end
  439.     end
  440.   when 1,2
  441.     if Input.trigger?(Input::C)
  442.       if @savestate == 1
  443.         $menu_call = false
  444.         load_file(make_filename(@file_index))
  445.         return
  446.       else
  447.         # 禁止存档的情况下
  448.         if $game_system.save_disabled
  449.           @help_window.set_text("抱歉,这里禁止存储.")
  450.           # 演奏冻结 SE
  451.           $game_system.se_play($data_system.buzzer_se)
  452.           return
  453.         end
  454.        $game_system.se_play($data_system.decision_se)
  455.        $last_savefile_index = @option_window.index
  456.        save_file(make_filename(@file_index))
  457.         return
  458.       end
  459.     end
  460.     # 取消
  461.     if Input.trigger?(Input::B)
  462.       $game_system.se_play($data_system.cancel_se)
  463.       @savefile_windows[@file_index].selected = false
  464.       @help_window.set_text("请选择.")
  465.       @savestate = 0
  466.       @option_window.active = true
  467.       return
  468.     end
  469.     # 向下选择
  470.     if Input.repeat?(Input::DOWN)
  471.       $game_system.se_play($data_system.cursor_se)
  472.       @savefile_windows[@file_index].selected = false
  473.       @file_index = (@file_index + 1) % 4
  474.       @savefile_windows[@file_index].selected = true
  475.       return
  476.     end
  477.     # 向上选择
  478.     if Input.repeat?(Input::UP)
  479.       $game_system.se_play($data_system.cursor_se)
  480.       @savefile_windows[@file_index].selected = false
  481.       @file_index = (@file_index + 3) % 4
  482.       @savefile_windows[@file_index].selected = true
  483.       return
  484.     end
  485.    
  486.     if Input.trigger?(Input::B)
  487.       $game_system.se_play($data_system.cancel_se)
  488.       @savestate = 2
  489.       @savefile_windows[@file_index].selected = true
  490.       return
  491.     end
  492.   end
  493. end
  494. #--------------------------------------------------------------------------
  495. # 建立记录文件索引
  496. #--------------------------------------------------------------------------
  497. def make_filename(file_index)
  498.   return "Save#{file_index + 1}.rxdata"
  499. end
  500. #--------------------------------------------------------------------------
  501. #  读取记录文件
  502. #     filename  : 被读取文件
  503. #--------------------------------------------------------------------------
  504. def load_file(filename)
  505.   # 文件不存在的情况下
  506.   unless FileTest.exist?(filename)
  507.     # 演奏冻结 SE
  508.     $game_system.se_play($data_system.buzzer_se)
  509.     return
  510.   end
  511.   # 演奏读档 SE
  512.   $game_system.se_play($data_system.load_se)
  513.   # 以二进制方式打开文件
  514.   # 写入存档数据
  515.   file = File.open(filename, "rb")
  516.   read_save_data(file)
  517.   file.close
  518.   # 演奏 BGM 与 BGS
  519.   $game_system.bgm_play($game_system.playing_bgm)
  520.   $game_system.bgs_play($game_system.playing_bgs)
  521.   # 刷新地图 (执行并行事件)
  522.   $game_map.update
  523.   # 切换到地图画面
  524.   $menu_call == false
  525.   $scene = Scene_Map.new
  526. end
  527. #--------------------------------------------------------------------------
  528. # ● 读取存档数据
  529. #     file : 读取用文件对像 (已经打开)
  530. #--------------------------------------------------------------------------
  531. def read_save_data(file)
  532.   # 读取描绘存档文件用的角色数据
  533.   characters = Marshal.load(file)
  534.   # 读取测量游戏时间用画面计数
  535.   Graphics.frame_count = Marshal.load(file)
  536.   # 读取各种游戏对像
  537.   $game_system        = Marshal.load(file)
  538.   $game_switches      = Marshal.load(file)
  539.   $game_variables     = Marshal.load(file)
  540.   $game_self_switches = Marshal.load(file)
  541.   $game_screen        = Marshal.load(file)
  542.   $game_actors        = Marshal.load(file)
  543.   $game_party         = Marshal.load(file)
  544.   $game_troop         = Marshal.load(file)
  545.   $game_map           = Marshal.load(file)
  546.   $game_player        = Marshal.load(file)
  547.     # 魔法编号与保存时有差异的情况下
  548.     # (加入编辑器的编辑过的数据)
  549.   if $game_system.magic_number != $data_system.magic_number
  550.     # 重新装载地图
  551.     $game_map.setup($game_map.map_id)
  552.     $game_player.center($game_player.x, $game_player.y)
  553.   end
  554.   # 刷新同伴成员
  555.   $game_party.refresh
  556. end
  557.   #--------------------------------------------------------------------------
  558.   # ● 写入存档文件
  559.   #--------------------------------------------------------------------------
  560.   def save_file(filename)
  561.     # 演奏存档 SE
  562.     $game_system.se_play($data_system.save_se)
  563.     # 写入存档数据
  564.     file = File.open(filename, "wb")
  565.     write_save_data(file)
  566.     file.close
  567.     # 切换到菜单画面
  568.     $scene = Scene_Loadsave.new
  569.   end
  570.   #--------------------------------------------------------------------------
  571.   # ● 写入存档数据
  572.   #     file : 写入用文件对像 (已经打开)
  573.   #--------------------------------------------------------------------------
  574.   def write_save_data(file)
  575.     # 生成描绘存档文件用的角色图形
  576.     characters = []
  577.     for i in 0...$game_party.actors.size
  578.       actor = $game_party.actors[i]
  579.       characters.push([actor.character_name, actor.character_hue])
  580.     end
  581.     # 写入描绘存档文件用的角色数据
  582.     Marshal.dump(characters, file)
  583.     # 写入测量游戏时间用画面计数
  584.     Marshal.dump(Graphics.frame_count, file)
  585.     # 增加 1 次存档次数
  586.     $game_system.save_count += 1
  587.     # 保存魔法编号
  588.     # (将编辑器保存的值以随机值替换)
  589.     $game_system.magic_number = $data_system.magic_number
  590.     # 写入各种游戏对像
  591.     Marshal.dump($game_system, file)
  592.     Marshal.dump($game_switches, file)
  593.     Marshal.dump($game_variables, file)
  594.     Marshal.dump($game_self_switches, file)
  595.     Marshal.dump($game_screen, file)
  596.     Marshal.dump($game_actors, file)
  597.     Marshal.dump($game_party, file)
  598.     Marshal.dump($game_troop, file)
  599.     Marshal.dump($game_map, file)
  600.     Marshal.dump($game_player, file)
  601.   end
  602. end
复制代码
我想把它放到结束菜单里面,怎样才能把它给加进去
就是想把这个添加到结束菜单中,应该怎样改Scene_End脚本?

Lv3.寻梦者

贝鲁耶的依叶森林
持镰的苍色水野

梦石
2
星屑
659
在线时间
563 小时
注册时间
2007-4-8
帖子
1304

第4届短篇游戏比赛季军短篇八RM组亚军

2
发表于 2011-2-7 02:16:31 | 只看该作者
这个脚本可能因为作者的需要添加了任务以及队列的系统,
已经帮你删去了。
把以下脚本添加进去,然后在Scence_Menu的160行
把$scene = Scene_Save.new改成$scene = Scene_Loadsave.new就可以了
  1. #==============================================================================
  2. # ■ 存取档合并脚本
  3. #------------------------------------------------------------------------------
  4. # BY:美兽
  5. #插入main之前,地图呼出方式$scene = Scene_Loadsave.new,主菜单里默认的也是该界面
  6. #不与默认的存取档功能冲突,方便个别地方只需存或者取的功能,虽然很简单,实际做起
  7. #来,考虑的地方还是比较多。 
  8. #==============================================================================
  9. #==============================================================================
  10. # ■ Scene_Load
  11. #------------------------------------------------------------------------------
  12. #  处理读档画面的类。
  13. #==============================================================================

  14. class Scene_Load < Scene_File
  15.   #--------------------------------------------------------------------------
  16.   # ● 初始化对像
  17.   #--------------------------------------------------------------------------
  18.   def initialize
  19.     # 再生成临时对像
  20.     $game_temp = Game_Temp.new
  21.     # 选择存档时间最新的文件
  22.     $game_temp.last_file_index = 0
  23.     latest_time = Time.at(0)
  24.     for i in 0..3
  25.       filename = make_filename(i)
  26.       if FileTest.exist?(filename)
  27.         file = File.open(filename, "r")
  28.         if file.mtime > latest_time
  29.           latest_time = file.mtime
  30.           $game_temp.last_file_index = i
  31.         end
  32.         file.close
  33.       end
  34.     end
  35.     super("要载入哪个文件?")
  36.   end
  37.   #--------------------------------------------------------------------------
  38.   # ● 确定时的处理
  39.   #--------------------------------------------------------------------------
  40.   def on_decision(filename)
  41.     # 文件不存在的情况下
  42.     unless FileTest.exist?(filename)
  43.       # 演奏冻结 SE
  44.       $game_system.se_play($data_system.buzzer_se)
  45.       return
  46.     end
  47.     $menu_call = false
  48.     # 演奏读档 SE
  49.     $game_system.se_play($data_system.load_se)
  50.     # 写入存档数据
  51.     file = File.open(filename, "rb")
  52.     read_save_data(file)
  53.     file.close
  54.     # 还原 BGM、BGS
  55.     $game_system.bgm_play($game_system.playing_bgm)
  56.     $game_system.bgs_play($game_system.playing_bgs)
  57.     # 刷新地图 (执行并行事件)
  58.     $game_map.update
  59.     # 切换到地图画面
  60.     $scene = Scene_Map.new
  61.   end
  62.   #--------------------------------------------------------------------------
  63.   # ● 取消时的处理
  64.   #--------------------------------------------------------------------------
  65.   def on_cancel
  66.     # 演奏取消 SE
  67.     $game_system.se_play($data_system.cancel_se)
  68.     # 切换到标题画面
  69.     $scene = Scene_Title.new
  70.   end
  71.   #--------------------------------------------------------------------------
  72.   # ● 读取存档数据
  73.   #     file : 读取用文件对像 (已经打开)
  74.   #--------------------------------------------------------------------------
  75.   def read_save_data(file)
  76.     # 读取描绘存档文件用的角色数据
  77.     characters = Marshal.load(file)
  78.     # 读取测量游戏时间用画面计数
  79.     Graphics.frame_count = Marshal.load(file)
  80.     # 读取各种游戏对像
  81.     $game_system        = Marshal.load(file)
  82.     $game_switches      = Marshal.load(file)
  83.     $game_variables     = Marshal.load(file)
  84.     $game_self_switches = Marshal.load(file)
  85.     $game_screen        = Marshal.load(file)
  86.     $game_actors        = Marshal.load(file)
  87.     $game_party         = Marshal.load(file)
  88.     $game_troop         = Marshal.load(file)
  89.     $game_map           = Marshal.load(file)
  90.     $game_player        = Marshal.load(file)
  91.     # 魔法编号与保存时有差异的情况下
  92.     # (加入编辑器的编辑过的数据)
  93.     if $game_system.magic_number != $data_system.magic_number
  94.       # 重新装载地图
  95.       $game_map.setup($game_map.map_id)
  96.       $game_player.center($game_player.x, $game_player.y)
  97.     end
  98.     # 刷新同伴成员
  99.     $game_party.refresh
  100.   end
  101. end
  102. #==============================================================================
  103. # ■ Window_LoadHelp
  104. #------------------------------------------------------------------------------
  105. #  存取档画面帮助信息的显示窗口。
  106. #==============================================================================

  107. class Window_LoadHelp < Window_Base
  108. #--------------------------------------------------------------------------
  109. #  初始化对象
  110. #--------------------------------------------------------------------------
  111. def initialize
  112.   super(0, 0, 320, 64)
  113.   self.contents = Bitmap.new(width - 32, height - 32)
  114.   self.contents.font.name = "黑体"
  115.   self.contents.font.size = 18
  116. end
  117. #--------------------------------------------------------------------------
  118. #  刷新文本
  119. #--------------------------------------------------------------------------
  120. def set_text(text, align = 1)
  121.   if text != @text or align != @align
  122.     self.contents.clear
  123.     self.contents.font.color = normal_color
  124.     self.contents.draw_text(4, 0, self.width - 40, 32, text, align)
  125.     @text = text
  126.     @align = align
  127.     @actor = nil
  128.   end
  129.   self.visible = true
  130. end
  131. end
  132. #==============================================================================
  133. #  Window_LoadCommand
  134. #------------------------------------------------------------------------------
  135. #  存取档画面选择按钮窗口
  136. #==============================================================================

  137. class Window_LoadCommand < Window_Selectable
  138. #--------------------------------------------------------------------------
  139. #  初始化对象
  140. #--------------------------------------------------------------------------
  141. def initialize
  142.   super(320, 0, 320, 64)
  143.   self.contents = Bitmap.new(width - 32, height - 32)
  144.   self.contents.font.name = "黑体"
  145.   self.contents.font.size = 18
  146.   @item_max = 2
  147.   @column_max = 2
  148.   @commands = ["读取", "存储"]
  149.   refresh
  150.   self.index = 0
  151. end
  152. #--------------------------------------------------------------------------
  153. #  刷新
  154. #--------------------------------------------------------------------------
  155. def refresh
  156.   self.contents.clear
  157.   for i in 0...@item_max
  158.     draw_item(i)
  159.   end
  160. end
  161. #--------------------------------------------------------------------------
  162. #  描画按钮文字
  163. #--------------------------------------------------------------------------
  164. def draw_item(index)
  165.   x = 4 + index * 160
  166.   self.contents.draw_text(x, 0, 144, 32, @commands[index])
  167. end
  168. #--------------------------------------------------------------------------
  169. # ● 项目无效化
  170. #     index : 项目编号
  171. #--------------------------------------------------------------------------
  172.   def disable_item(index)
  173.     draw_item(index, disabled_color)
  174.   end

  175. end

  176. #==============================================================================
  177. #  Scene_Loadsave
  178. #------------------------------------------------------------------------------
  179. # 处理存取档画面的类。
  180. #==============================================================================

  181. class Scene_Loadsave
  182. #--------------------------------------------------------------------------
  183. # ● 初始化对像
  184. #     $last_savefile_index : 记录光标位置
  185. #--------------------------------------------------------------------------
  186. def initialize
  187.   $last_savefile_index = 0 if $last_savefile_index == nil
  188. end
  189. #--------------------------------------------------------------------------
  190. #  主处理
  191. #--------------------------------------------------------------------------
  192. def main
  193.   @savestate = 0
  194.   # 生成窗口
  195.   @help_window = Window_LoadHelp.new
  196.   @help_window.set_text("请选择.")
  197.   @option_window = Window_LoadCommand.new
  198.   @savefile_windows = []
  199.   for i in 0..3
  200.     @savefile_windows.push(Window_SaveFile.new(i, make_filename(i)))
  201.   end
  202.   @option_window.index = $last_savefile_index
  203.   @file_index = 0
  204.   # 执行过渡
  205.   Graphics.transition
  206.   # 主循环
  207.   loop do
  208.     # 刷新游戏画面
  209.     Graphics.update
  210.     # 刷新输入信息
  211.     Input.update
  212.     # 刷新画面
  213.     update
  214.     # 如果画面被切换的话就中断循环
  215.     if $scene != self
  216.       break
  217.     end
  218.   end
  219.   # 准备过渡
  220.   Graphics.freeze
  221.   # 释放窗口
  222.   @help_window.dispose
  223.   @option_window.dispose
  224.   for i in @savefile_windows
  225.     i.dispose
  226.   end
  227. end

  228. #--------------------------------------------------------------------------
  229. #  ● 刷新画面
  230. #--------------------------------------------------------------------------
  231. def update
  232.   # 刷新窗口
  233.   @help_window.update
  234.   @option_window.update
  235.   for i in @savefile_windows
  236.     i.update
  237.   end
  238.   
  239.   case @savestate
  240.   when 0
  241.       if Input.trigger?(Input::B)
  242.       $game_system.se_play($data_system.cancel_se)
  243.       # 淡入淡出 BGM
  244.       Audio.bgm_fade(800)
  245.       # 返回地图
  246.       if $menu_call == false
  247.       # 切换到地图画面
  248.       $scene = Scene_Map.new
  249.         return
  250.       end
  251.       # 切换到菜单画面
  252.       $menu_call = false
  253.       $scene = Scene_Menu.new(4)
  254.    end
  255.     if Input.trigger?(Input::C)
  256.       case @option_window.index
  257.       when 0
  258.         @savefile_windows[@file_index].selected = true
  259.         @option_window.active = false
  260.         @help_window.set_text("请选择一个文件进行读取.")
  261.         @savestate  = 1
  262.         return
  263.       when 1
  264.         @savefile_windows[@file_index].selected = true
  265.         @option_window.active = false
  266.         @help_window.set_text("请选择一个文件进行存储.")
  267.         @savestate = 2
  268.         return
  269.         return
  270.       end
  271.     end
  272.   when 1,2
  273.     if Input.trigger?(Input::C)
  274.       if @savestate == 1
  275.         $menu_call = false
  276.         load_file(make_filename(@file_index))
  277.         return
  278.       else
  279.         # 禁止存档的情况下
  280.         if $game_system.save_disabled
  281.           @help_window.set_text("抱歉,这里禁止存储.")
  282.           # 演奏冻结 SE
  283.           $game_system.se_play($data_system.buzzer_se)
  284.           return
  285.         end
  286.        $game_system.se_play($data_system.decision_se)
  287.        $last_savefile_index = @option_window.index
  288.        save_file(make_filename(@file_index))
  289.         return
  290.       end
  291.     end
  292.     # 取消
  293.     if Input.trigger?(Input::B)
  294.       $game_system.se_play($data_system.cancel_se)
  295.       @savefile_windows[@file_index].selected = false
  296.       @help_window.set_text("请选择.")
  297.       @savestate = 0
  298.       @option_window.active = true
  299.       return
  300.     end
  301.     # 向下选择
  302.     if Input.repeat?(Input::DOWN)
  303.       $game_system.se_play($data_system.cursor_se)
  304.       @savefile_windows[@file_index].selected = false
  305.       @file_index = (@file_index + 1) % 4
  306.       @savefile_windows[@file_index].selected = true
  307.       return
  308.     end
  309.     # 向上选择
  310.     if Input.repeat?(Input::UP)
  311.       $game_system.se_play($data_system.cursor_se)
  312.       @savefile_windows[@file_index].selected = false
  313.       @file_index = (@file_index + 3) % 4
  314.       @savefile_windows[@file_index].selected = true
  315.       return
  316.     end
  317.    
  318.     if Input.trigger?(Input::B)
  319.       $game_system.se_play($data_system.cancel_se)
  320.       @savestate = 2
  321.       @savefile_windows[@file_index].selected = true
  322.       return
  323.     end
  324.   end
  325. end
  326. #--------------------------------------------------------------------------
  327. # 建立记录文件索引
  328. #--------------------------------------------------------------------------
  329. def make_filename(file_index)
  330.   return "Save#{file_index + 1}.rxdata"
  331. end
  332. #--------------------------------------------------------------------------
  333. #  读取记录文件
  334. #     filename  : 被读取文件
  335. #--------------------------------------------------------------------------
  336. def load_file(filename)
  337.   # 文件不存在的情况下
  338.   unless FileTest.exist?(filename)
  339.     # 演奏冻结 SE
  340.     $game_system.se_play($data_system.buzzer_se)
  341.     return
  342.   end
  343.   # 演奏读档 SE
  344.   $game_system.se_play($data_system.load_se)
  345.   # 以二进制方式打开文件
  346.   # 写入存档数据
  347.   file = File.open(filename, "rb")
  348.   read_save_data(file)
  349.   file.close
  350.   # 演奏 BGM 与 BGS
  351.   $game_system.bgm_play($game_system.playing_bgm)
  352.   $game_system.bgs_play($game_system.playing_bgs)
  353.   # 刷新地图 (执行并行事件)
  354.   $game_map.update
  355.   # 切换到地图画面
  356.   $menu_call == false
  357.   $scene = Scene_Map.new
  358. end
  359. #--------------------------------------------------------------------------
  360. # ● 读取存档数据
  361. #     file : 读取用文件对像 (已经打开)
  362. #--------------------------------------------------------------------------
  363. def read_save_data(file)
  364.   # 读取描绘存档文件用的角色数据
  365.   characters = Marshal.load(file)
  366.   # 读取测量游戏时间用画面计数
  367.   Graphics.frame_count = Marshal.load(file)
  368.   # 读取各种游戏对像
  369.   $game_system        = Marshal.load(file)
  370.   $game_switches      = Marshal.load(file)
  371.   $game_variables     = Marshal.load(file)
  372.   $game_self_switches = Marshal.load(file)
  373.   $game_screen        = Marshal.load(file)
  374.   $game_actors        = Marshal.load(file)
  375.   $game_party         = Marshal.load(file)
  376.   $game_troop         = Marshal.load(file)
  377.   $game_map           = Marshal.load(file)
  378.   $game_player        = Marshal.load(file)
  379.     # 魔法编号与保存时有差异的情况下
  380.     # (加入编辑器的编辑过的数据)
  381.   if $game_system.magic_number != $data_system.magic_number
  382.     # 重新装载地图
  383.     $game_map.setup($game_map.map_id)
  384.     $game_player.center($game_player.x, $game_player.y)
  385.   end
  386.   # 刷新同伴成员
  387.   $game_party.refresh
  388. end
  389.   #--------------------------------------------------------------------------
  390.   # ● 写入存档文件
  391.   #--------------------------------------------------------------------------
  392.   def save_file(filename)
  393.     # 演奏存档 SE
  394.     $game_system.se_play($data_system.save_se)
  395.     # 写入存档数据
  396.     file = File.open(filename, "wb")
  397.     write_save_data(file)
  398.     file.close
  399.     # 切换到菜单画面
  400.     $scene = Scene_Loadsave.new
  401.   end
  402.   #--------------------------------------------------------------------------
  403.   # ● 写入存档数据
  404.   #     file : 写入用文件对像 (已经打开)
  405.   #--------------------------------------------------------------------------
  406.   def write_save_data(file)
  407.     # 生成描绘存档文件用的角色图形
  408.     characters = []
  409.     for i in 0...$game_party.actors.size
  410.       actor = $game_party.actors[i]
  411.       characters.push([actor.character_name, actor.character_hue])
  412.     end
  413.     # 写入描绘存档文件用的角色数据
  414.     Marshal.dump(characters, file)
  415.     # 写入测量游戏时间用画面计数
  416.     Marshal.dump(Graphics.frame_count, file)
  417.     # 增加 1 次存档次数
  418.     $game_system.save_count += 1
  419.     # 保存魔法编号
  420.     # (将编辑器保存的值以随机值替换)
  421.     $game_system.magic_number = $data_system.magic_number
  422.     # 写入各种游戏对像
  423.     Marshal.dump($game_system, file)
  424.     Marshal.dump($game_switches, file)
  425.     Marshal.dump($game_variables, file)
  426.     Marshal.dump($game_self_switches, file)
  427.     Marshal.dump($game_screen, file)
  428.     Marshal.dump($game_actors, file)
  429.     Marshal.dump($game_party, file)
  430.     Marshal.dump($game_troop, file)
  431.     Marshal.dump($game_map, file)
  432.     Marshal.dump($game_player, file)
  433.   end
  434. end
复制代码
水野的主页><
头像来自于游戏《龙背上的骑兵3》主角——Zero
回复 支持 反对

使用道具 举报

Lv2.观梦者

虚構歪曲

梦石
0
星屑
364
在线时间
1198 小时
注册时间
2010-12-18
帖子
3928

贵宾

3
发表于 2011-2-7 12:13:58 | 只看该作者
没看懂您需要达到的要求。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
57
在线时间
161 小时
注册时间
2011-2-2
帖子
469
4
 楼主| 发表于 2011-2-7 18:59:53 | 只看该作者
回复 水野·迪尔 的帖子

任务和队列是我加上去的,而且我想知道的是怎么把这个加到结束菜单里去

点评

我整个人都风中凌乱了……  发表于 2011-2-7 22:44
我又回来打酱油了
回复 支持 反对

使用道具 举报

Lv2.观梦者

虚構歪曲

梦石
0
星屑
364
在线时间
1198 小时
注册时间
2010-12-18
帖子
3928

贵宾

5
发表于 2011-2-7 19:02:32 | 只看该作者
回复 坚强的羁绊 的帖子

增加结束菜单的项目数。
接着加入选择该项的处理。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
57
在线时间
161 小时
注册时间
2011-2-2
帖子
469
6
 楼主| 发表于 2011-2-7 19:07:38 | 只看该作者
回复 忧雪の伤 的帖子

怎么加啊
  1. #==============================================================================
  2. # ■ Scene_End
  3. #------------------------------------------------------------------------------
  4. #  处理游戏结束画面的类。
  5. #==============================================================================

  6. class Scene_End
  7.   #--------------------------------------------------------------------------
  8.   # ● 主处理
  9.   #--------------------------------------------------------------------------
  10.   def main
  11.     # 生成命令窗口
  12.     s1 = "记录"
  13.     s2 = "返回标题"
  14.     s3 = "结束"
  15.     s4 = "取消"
  16.     @command_window = Window_Command.new(192, [s1, s2, s3, s4])
  17.     @command_window.x = 320 - @command_window.width / 2
  18.     @command_window.y = 240 - @command_window.height / 2
  19.     # 执行过渡
  20.     Graphics.transition
  21.     # 主循环
  22.     loop do
  23.       # 刷新游戏画面
  24.       Graphics.update
  25.       # 刷新输入情报
  26.       Input.update
  27.       # 刷新画面
  28.       update
  29.       # 如果画面切换的话就中断循环
  30.       if $scene != self
  31.         break
  32.       end
  33.     end
  34.     # 准备过渡
  35.     Graphics.freeze
  36.     # 释放窗口
  37.     @command_window.dispose
  38.     # 如果在标题画面切换中的情况下
  39.     if $scene.is_a?(Scene_Title)
  40.       # 淡入淡出画面
  41.       Graphics.transition
  42.       Graphics.freeze
  43.     end
  44.   end
  45.   #--------------------------------------------------------------------------
  46.   # ● 刷新画面
  47.   #--------------------------------------------------------------------------
  48.   def update
  49.     # 刷新命令窗口
  50.     @command_window.update
  51.     # 按下 B 键的情况下
  52.     if Input.trigger?(Input::B)
  53.       # 演奏取消 SE
  54.       $game_system.se_play($data_system.cancel_se)
  55.       # 切换到菜单画面
  56.       $scene = Scene_Menu.new(5)
  57.       return
  58.     end
  59.     # 按下 C 键的场合下
  60.     if Input.trigger?(Input::C)
  61.       # 命令窗口光标位置分支
  62.       case @command_window.index
  63.       when 0  # 记录
  64.         
  65.       when 1  # 返回标题画面
  66.         command_to_title
  67.       when 2  # 退出
  68.         command_shutdown
  69.       when 3  # 取消
  70.         command_cancel
  71.       end
  72.       return
  73.     end
  74.   end
  75.   #--------------------------------------------------------------------------
  76.   # ● 选择命令 [返回标题画面] 时的处理
  77.   #--------------------------------------------------------------------------
  78.   def command_to_title
  79.     # 演奏确定 SE
  80.     $game_system.se_play($data_system.decision_se)
  81.     # 淡入淡出 BGM、BGS、ME
  82.     Audio.bgm_fade(800)
  83.     Audio.bgs_fade(800)
  84.     Audio.me_fade(800)
  85.     # 切换到标题画面
  86.     $scene = Scene_Title.new
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ● 选择命令 [退出] 时的处理
  90.   #--------------------------------------------------------------------------
  91.   def command_shutdown
  92.     # 演奏确定 SE
  93.     $game_system.se_play($data_system.decision_se)
  94.     # 淡入淡出 BGM、BGS、ME
  95.     Audio.bgm_fade(800)
  96.     Audio.bgs_fade(800)
  97.     Audio.me_fade(800)
  98.     # 退出
  99.     $scene = nil
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ● 选择命令 [取消] 时的处理
  103.   #--------------------------------------------------------------------------
  104.   def command_cancel
  105.     # 演奏确定 SE
  106.     $game_system.se_play($data_system.decision_se)
  107.     # 切换到菜单画面
  108.     $scene = Scene_Menu.new(5)
  109.   #--------------------------------------------------------------------------
  110.   # ● 选择命令 [记录] 时的处理
  111.   #--------------------------------------------------------------------------
  112.   def
  113.     # 演奏确定 SE
  114.     $game_system.se_play($data_system.decision_se)
  115.     # 切换到记录画面
  116.     $scene = Scene_Loadsave.new
  117.   end
  118. end
  119. end
复制代码
65行上不会弄的说
我又回来打酱油了
回复 支持 反对

使用道具 举报

Lv2.观梦者

虚構歪曲

梦石
0
星屑
364
在线时间
1198 小时
注册时间
2010-12-18
帖子
3928

贵宾

7
发表于 2011-2-7 19:11:05 | 只看该作者
加多一个处理“def XXXXX”。并在那里输入“XXXXX”
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
57
在线时间
161 小时
注册时间
2011-2-2
帖子
469
8
 楼主| 发表于 2011-2-7 19:13:54 | 只看该作者
还是有些不懂
回复 支持 反对

使用道具 举报

Lv2.观梦者

虚構歪曲

梦石
0
星屑
364
在线时间
1198 小时
注册时间
2010-12-18
帖子
3928

贵宾

9
发表于 2011-2-7 19:20:49 | 只看该作者
你的写的差不多了啊。
113行def随便加个名称,接着65输入那个名称即可。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
57
在线时间
161 小时
注册时间
2011-2-2
帖子
469
10
 楼主| 发表于 2011-2-7 19:24:23 | 只看该作者
加上后总显示65行错误

点评

"def command_file"113行改为。 "command_file"65行改为。  发表于 2011-2-7 19:38
随便加的  发表于 2011-2-7 19:36
你怎么加的……  发表于 2011-2-7 19:31
我又回来打酱油了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 17:17

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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