幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2763|回复: 12

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

[复制链接]

11

主题

77

帖子

2508

积分

⑥精研

积分
2508
发表于 2004-11-28 19:47:01 | 显示全部楼层 |阅读模式
请问怎样在存档中加入读档功能?

在默认系统中只有存档功能,请问怎样才能加入读档?
喜欢李逍遥的朋友这里坐坐 http://wind.c76.zgsj.com/xj/list.asp?boardid=23 喜欢圣斗士的朋友这里坐坐 http://wind.c76.zgsj.com/xj/list.asp?boardid=29
回复

使用道具 举报

11

主题

77

帖子

2508

积分

⑥精研

积分
2508
 楼主| 发表于 2004-11-28 20:15:55 | 显示全部楼层
这样每次读档还要退回到初始画面,很不方便,我想要不退出就能读档的方法。
喜欢李逍遥的朋友这里坐坐 http://wind.c76.zgsj.com/xj/list.asp?boardid=23 喜欢圣斗士的朋友这里坐坐 http://wind.c76.zgsj.com/xj/list.asp?boardid=29
回复 支持 反对

使用道具 举报

3

主题

45

帖子

1043

积分

⑥精研

积分
1043
发表于 2004-11-28 21:29:55 | 显示全部楼层

试试看吧^_^

抱歉,后来我再试了一下,发现如果按取消的话会跳回标题画面;所以择提供的脚本可以和我提供的方式合用


新建一页并贴上择的脚本,然后在下面这里作更改


PS.6楼的脚本是在\"结束\"选单出现”读取进度”选项


不好意思,没有作完全的测试就发帖[em04]




在Scene_Menu的def main中加入
s7 = \"读取\" *或是你想要叫什幺都可以


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


在def update_command加入
when 6  # 读取
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 切换到读取画面
        $scene = Scene_Load.newç=更换成$scene = Scene_Load2.new
PS.加入读取选项后,时间、步数,金钱等的视窗位置和大小需要调整。
    请在
    @playtime_window = Window_PlayTime.new
    @playtime_window.x = 0
    @playtime_window.y = 250<===移动上下位置,窗口大小则需要在Window_PlayTime中自行调整
    # 生成步数窗口
    @steps_window = Window_Steps.new
    @steps_window.x = 0
    @steps_window.y = 320<===移动上下位置,窗口大小则需要在Window_Steps中自行调整
    # 生成金钱窗口
    @gold_window = Window_Gold.new
    @gold_window.x = 0
    @gold_window.y = 416<===移动上下位置,窗口大小则需要在Window_Gold中自行调整







[此贴子已经被作者于2004-11-30 15:34:33编辑过]
回复 支持 反对

使用道具 举报

3

主题

45

帖子

795

积分

⑤进阶

-累-人

积分
795
发表于 2004-11-28 21:33:40 | 显示全部楼层
#==============================================================================
# ■ 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_Map.new
  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 = Scene_Load_2.new  调用

就不用回标题了

不要覆盖原来的Scene_Load脚本哦....在其下面重开一个吧

[此贴子已经被作者于2004-11-28 21:40:04编辑过]
...
回复 支持 反对

使用道具 举报

3

主题

45

帖子

1043

积分

⑥精研

积分
1043
发表于 2004-11-28 21:55:14 | 显示全部楼层

修正

也可以在Scene_End里增加:

class Scene_End
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    # 生成命令窗口
    s1 = \"回标题画面\"
    s2 = \"关闭游戏\"
    s3 = \"取消\"
    s4 = \"读取游戏进度\"<===1
    @command_window = Window_Command.new(192, [s1, s2, s3, s4]) <===2
    @command_window.x = 320 - @command_window.width / 2
    @command_window.y = 320 - @command_window.height / 2
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入情报
      Input.update
      # 刷新画面
      update
      # 如果画面切换的话就中断循环
      if $scene != self
        break
      end
    end
    # 准备过渡
    Graphics.freeze
    # 释放窗口
    @command_window.dispose
    # 如果在标题画面切换中的情况下
    if $scene.is_a?(Scene_Title)
      # 淡入淡出画面
      Graphics.transition
      Graphics.freeze
    end
  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(5)
      return
    end
    # 按下 C 键的场合下
    if Input.trigger?(Input::C)
      # 命令窗口光标位置分支
      case @command_window.index
      when 0  # 回车标题画面
        command_to_title
      when 1  # 退出
        command_shutdown
      when 2  # 取消
        command_cancel
      when 3 # 读取<======3
        command_load
     end
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 选择命令 [回车标题画面] 时的处理
  #--------------------------------------------------------------------------
  def command_to_title
    # 演奏确定 SE
    $game_system.se_play($data_system.decision_se)
    # 淡入淡出 BGM、BGS、ME
    Audio.bgm_fade(800)
    Audio.bgs_fade(800)
    Audio.me_fade(800)
    # 切换到标题画面
    $scene = Scene_Title.new
  end
  #--------------------------------------------------------------------------
  # ● 选择命令 [退出] 时的处理
  #--------------------------------------------------------------------------
  def command_shutdown
    # 演奏确定 SE
    $game_system.se_play($data_system.decision_se)
    # 淡入淡出 BGM、BGS、ME
    Audio.bgm_fade(800)
    Audio.bgs_fade(800)
    Audio.me_fade(800)
    # 退出
    $scene = nil
  end
  #--------------------------------------------------------------------------
  # ● 选择命令 [取消] 时的处理
  #--------------------------------------------------------------------------
  def command_cancel
    # 演奏确定 SE
    $game_system.se_play($data_system.decision_se)
    # 切换到菜单画面
    $scene = Scene_Menu.new(5)
  end
  #--------------------------------------------------------------------------
# ● 选择[读取进度]时的处理
#--------------------------------------------------------------------------
def command_load
  # 决定SE演奏
  $game_system.se_play($data_system.decision_se)
  # 读取画面切换
  $scene = Scene_Load2.new<======4
  end
end

[此贴子已经被作者于2004-11-30 15:37:21编辑过]
回复 支持 反对

使用道具 举报

11

主题

77

帖子

2508

积分

⑥精研

积分
2508
 楼主| 发表于 2004-11-30 20:19:30 | 显示全部楼层
谢谢楼上两位,我回去试试。
喜欢李逍遥的朋友这里坐坐 http://wind.c76.zgsj.com/xj/list.asp?boardid=23 喜欢圣斗士的朋友这里坐坐 http://wind.c76.zgsj.com/xj/list.asp?boardid=29
回复 支持 反对

使用道具 举报

13

主题

72

帖子

2053

积分

⑥精研

积分
2053
发表于 2004-12-13 13:07:14 | 显示全部楼层
很不错哎
感谢ING
收了
[em02]
21世纪最贵的是什么? 人才!! 科学技术才是第一生产力!!! 所以……………(画外音:打劫,把钱交出来!) …… ………… 所以我最烦这些强盗了,一点技术含量都没有。
回复 支持 反对

使用道具 举报

11

主题

77

帖子

2508

积分

⑥精研

积分
2508
 楼主| 发表于 2004-12-14 12:21:38 | 显示全部楼层
测试成功,谢谢两位。
喜欢李逍遥的朋友这里坐坐 http://wind.c76.zgsj.com/xj/list.asp?boardid=23 喜欢圣斗士的朋友这里坐坐 http://wind.c76.zgsj.com/xj/list.asp?boardid=29
回复 支持 反对

使用道具 举报

0

主题

3

帖子

87

积分

②入门

积分
87
发表于 2004-12-16 02:16:16 | 显示全部楼层
其实还有其他方法的,首先要做一个新的Scene_system:

class Scene_system
  
def main
   # 生成命令窗口
    s1 = \"SAVE\"
    s2 = \"LOAD\"
    s3 = \"取消\"
    @command_window = Window_Command.new(120, [s1, s2, s3])
    @command_window.x = 320 - @command_window.width / 2
    @command_window.y = 240 - @command_window.height / 2
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入情报
      Input.update
      # 刷新画面
      update
      # 如果画面切换的话就中断循环
      if $scene != self
        break
      end
    end
    # 准备过渡
    Graphics.freeze
    # 释放窗口
    @command_window.dispose
    # 如果在标题画面切换中的情况下
    if $scene.is_a?(Scene_Title)
      # 淡入淡出画面
      Graphics.transition
      Graphics.freeze
    end
  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(5)
      return
    end
    # 按下 C 键的场合下
    if Input.trigger?(Input::C)
      # 命令窗口光标位置分支
      case @command_window.index
      when 0  # SAVE
        command_save
      when 1  # LOAD
        command_load
      when 2  # 取消
        command_cancel
      end
      return
    end
  end

  #--------------------------------------------------------------------------
  # ● 选择命令 [save] 时的处理
  #--------------------------------------------------------------------------
  def command_save
    # 演奏确定 SE
    $game_system.se_play($data_system.decision_se)
    # 淡入淡出 BGM、BGS、ME
    Audio.bgm_fade(800)
    Audio.bgs_fade(800)
    Audio.me_fade(800)
    # 切换到存盘画面
    $scene = Scene_Save.new
  end
  #--------------------------------------------------------------------------
  # ● 选择命令 [load] 时的处理
  #--------------------------------------------------------------------------
  def command_load
    # 演奏确定 SE
    $game_system.se_play($data_system.decision_se)
    # 淡入淡出 BGM、BGS、ME
    Audio.bgm_fade(800)
    Audio.bgs_fade(800)
    Audio.me_fade(800)
    # 读取
    $scene = Scene_Load.new
  end
  #--------------------------------------------------------------------------
  # ● 选择命令 [取消] 时的处理
  #--------------------------------------------------------------------------
  def command_cancel
    # 演奏确定 SE
    $game_system.se_play($data_system.decision_se)
    # 切换到菜单画面
    $scene = Scene_Menu.new(5)
  end
end

然后修改scene_menu里面的存储这一段:

      when 4  # 存档
        # 禁止存档的情况下
        if $game_system.save_disabled
          # 演奏冻结 SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        # 演奏确定 SE
        $game_system.se_play($data_system.decision_se)
        # 切换到存档画面
        $scene = Scene_system.new


就可以直接在存盘那里选择s/l了

[此贴子已经被作者于2004-12-16 2:17:11编辑过]
回复 支持 反对

使用道具 举报

11

主题

77

帖子

2508

积分

⑥精研

积分
2508
 楼主| 发表于 2004-12-17 20:45:24 | 显示全部楼层
楼上大人,你这个代码要复制到什么地方,怎么用?能详细讲解一下么?谢谢。
喜欢李逍遥的朋友这里坐坐 http://wind.c76.zgsj.com/xj/list.asp?boardid=23 喜欢圣斗士的朋友这里坐坐 http://wind.c76.zgsj.com/xj/list.asp?boardid=29
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-8 12:46 , Processed in 0.012928 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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