幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
12
返回列表 发新帖
楼主: 风蓝

[求助]请问怎样在存档中加入读档功能?

[复制链接]

0

主题

3

帖子

87

积分

②入门

积分
87
发表于 2004-12-18 10:34:05 | 显示全部楼层
以下是引用风蓝在2004-12-17 20:45:24的发言:
楼上大人,你这个代码要复制到什么地方,怎么用?能详细讲解一下么?谢谢。

前面的那部分要新建一个脚本,后边的部分是直接修改已存在的Scene_menu
回复 支持 反对

使用道具 举报

1

主题

12

帖子

311

积分

④见习

积分
311
发表于 2004-12-30 13:56:55 | 显示全部楼层
楼上的有个BUG,当进入读档画面又按B键取消时~~~就会回到标题画面
回复 支持 反对

使用道具 举报

0

主题

5

帖子

137

积分

③业余

积分
137
发表于 2004-12-30 21:37:43 | 显示全部楼层
完整修改如下:

在RGSS中Scene_Load文件下新建Scene_Load_2文件  其内容如下

#==============================================================================
# ■ Scene_Load_2
#------------------------------------------------------------------------------
#  处理读档画面的类。
#==============================================================================

class Scene_Load_2 < Scene_File
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    # 再生成临时对像
    $game_temp = Game_Temp.new
    # 选择存档时间最新的文件
    $game_temp.last_file_index = 0
    latest_time = Time.at(0)
    for i in 0..3
      filename = make_filename(i)
      if FileTest.exist?(filename)
        file = File.open(filename, \"r\")
        if file.mtime > latest_time
          latest_time = file.mtime
          $game_temp.last_file_index = i
        end
        file.close
      end
    end
    super(\"要载入哪个文件?\")
  end
  #--------------------------------------------------------------------------
  # ● 确定时的处理
  #--------------------------------------------------------------------------
  def on_decision(filename)
    # 文件不存在的情况下
    unless FileTest.exist?(filename)
      # 演奏冻结 SE
      $game_system.se_play($data_system.buzzer_se)
      return
    end
    # 演奏读档 SE
    $game_system.se_play($data_system.load_se)
    # 写入存档数据
    file = File.open(filename, \"rb\")
    read_save_data(file)
    file.close
    # 还原 BGM、BGS
    $game_system.bgm_play($game_system.playing_bgm)
    $game_system.bgs_play($game_system.playing_bgs)
    # 刷新地图 (执行并行事件)
    $game_map.update
    # 切换到地图画面
    $scene = Scene_Map.new
  end
  #--------------------------------------------------------------------------
  # ● 取消时的处理
  #--------------------------------------------------------------------------
  def on_cancel
    # 演奏取消 SE
    $game_system.se_play($data_system.cancel_se)
    # 切换到地图画面
    $scene = Scene_Menu.new(5)      (修改这里  才不至于后期按B取消读档会直接跳到地图)
  end
  #--------------------------------------------------------------------------
  # ● 读取存档数据
  #     file : 读取用文件对像 (已经打开)
  #--------------------------------------------------------------------------
  def read_save_data(file)
    # 读取描绘存档文件用的角色数据
    characters = Marshal.load(file)
    # 读取测量游戏时间用画面计数
    Graphics.frame_count = Marshal.load(file)
    # 读取各种游戏对像
    $game_system        = Marshal.load(file)
    $game_switches      = Marshal.load(file)
    $game_variables     = Marshal.load(file)
    $game_self_switches = Marshal.load(file)
    $game_screen        = Marshal.load(file)
    $game_actors        = Marshal.load(file)
    $game_party         = Marshal.load(file)
    $game_troop         = Marshal.load(file)
    $game_map           = Marshal.load(file)
    $game_player        = Marshal.load(file)
    # 魔法编号与保存时有差异的情况下
    # (加入编辑器的编辑过的数据)
    if $game_system.magic_number != $data_system.magic_number
      # 重新装载地图
      $game_map.setup($game_map.map_id)
      $game_player.center($game_player.x, $game_player.y)
    end
    # 刷新同伴成员
    $game_party.refresh
  end
end

然后在Scene_Menu的def main中加入
s6 = \"读档\"
s7 = \"结束游戏\" *或是你想要叫什幺都可以   (原s6 = \"结束游戏\"  删除)



@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])


在def update_command加入
    when 5  # 读档
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 切换到读档画面
        $scene = Scene_Load_2.new
    when 6  # 游戏结束
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 切换到游戏结束画面
        $scene = Scene_End.new
      end
     return                                         (原when 5 # 游戏结束一段删除)
    end
  end

修改@playtime_window.y = 240  

       @steps_window.y = 340

修改Scene_End中 def update
    # 刷新命令窗口
    @command_window.update
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 切换到菜单画面
      $scene = Scene_Menu.new(6)

def command_cancel
    # 演奏确定 SE
    $game_system.se_play($data_system.decision_se)
    # 切换到菜单画面
    $scene = Scene_Menu.new(6)
      return

感谢楼上几位兄弟的指点  按照你们的方法我成功的解决了这个问题  只是其中有存在些许不足  所以我在此做点补充
即使我索小白 我也索最勤劳的小白
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2025-6-8 16:30 , Processed in 0.009660 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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