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

Project1

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

[已经解决] 存档读档只读取第一个

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
95 小时
注册时间
2011-1-19
帖子
27
跳转到指定楼层
1
发表于 2013-9-18 20:39:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
有没有大神能弄个脚本

就是点击存档之后(或者呼出存档画面)不会问你选择“要保存吗”,而是直接把存档存在第一个位置,不呼出存档画面

读档也是类似的,不呼出读档画面直接读取第一个档案

说明白点和使命召唤的存档系统差不多,存档只有一个,读档只有一个。

Lv2.观梦者 (暗夜天使)

万兽

梦石
0
星屑
597
在线时间
2271 小时
注册时间
2006-11-4
帖子
4868

贵宾

2
发表于 2013-9-18 21:37:27 | 只看该作者
指定存档:
RUBY 代码复制
  1. file = File.open("Save1.rxdata","wb")
  2. Scene_Save.new.write_save_data(file)
  3. file.clos


指定读档:

RUBY 代码复制
  1. file = File.open("Save1.rxdata","wb")
  2. Scene_Load.new.read_save_data(file)
  3. file.clos

点评

好吧,光标位置是0。。。表示看不到脚本。。。  发表于 2013-9-18 22:26
默认存档脚本是index+1吧。  发表于 2013-9-18 22:13
第一个不是 save0.rxdata 吗?  发表于 2013-9-18 22:08

评分

参与人数 1星屑 +30 收起 理由
myownroc + 30 不完整答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
95 小时
注册时间
2011-1-19
帖子
27
3
 楼主| 发表于 2013-9-18 22:28:06 | 只看该作者
本帖最后由 banbianzhang 于 2013-9-18 22:34 编辑
弗雷德 发表于 2013-9-18 21:37
指定存档:
file = File.open("Save1.rxdata","wb")
Scene_Save.new.write_save_data(file)


大神出了点问题

读档的时候提示 “Scene_Load” 第69行发生了IOError
Not opened for reading“
怎么回事?
还有能不能还原bgm和bgs?

点评

刚刚输错了……这个该怎么解决?  发表于 2013-9-18 22:37
是Load  发表于 2013-9-18 22:29
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
95 小时
注册时间
2011-1-19
帖子
27
4
 楼主| 发表于 2013-9-19 07:17:04 | 只看该作者
顺便再问一下,怎么检测文件的的存在,当save1这个文件不存在时这个读档脚本没有用

还有抱歉大神之前打错了,能看看看怎么解决Scene_Load第69行IOError
Not opened for reading“的问题吗
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

5
发表于 2013-9-19 10:36:47 | 只看该作者
我做了一个符合你要求的脚本,直接粘贴到最脚本Main组的最后面就可以了,在新工程里测试无错误,希望能有点帮助。
  1. #==============================================================================
  2. # 单存档文件系统
  3. # 作者:RyanBern
  4. #------------------------------------------------------------------------------
  5. # 只有一个存档的系统,屏蔽了Scene_Save和SceneLoad
  6. #==============================================================================
  7. class Scene_Save
  8.   # 快速存档
  9.   def qsave
  10.     # 文件名
  11.     filename = "Save.rxdata"
  12.     # 写入存档数据
  13.     file = File.open(filename,"wb")
  14.     write_save_data(file)
  15.     file.close
  16.   end
  17. end
  18. class Scene_Load
  19.   # 快速读档
  20.   def qload
  21.     filename = "Save.rxdata"
  22.     # 读取存档数据
  23.     file = File.open(filename, "rb")
  24.     read_save_data(file)
  25.     file.close
  26.     # 还原 BGM、BGS
  27.     $game_system.bgm_play($game_system.playing_bgm)
  28.     $game_system.bgs_play($game_system.playing_bgs)
  29.     # 刷新地图 (执行并行事件)
  30.     $game_map.update
  31.     # 切换到地图画面
  32.     $scene = Scene_Map.new
  33.   end
  34. end

  35. class Scene_Menu
  36.   #--------------------------------------------------------------------------
  37.   # ● 刷新画面 (命令窗口被激活的情况下)
  38.   #--------------------------------------------------------------------------
  39.   def update_command
  40.     # 按下 B 键的情况下
  41.     if Input.trigger?(Input::B)
  42.       # 演奏取消 SE
  43.       $game_system.se_play($data_system.cancel_se)
  44.       # 切换的地图画面
  45.       $scene = Scene_Map.new
  46.       return
  47.     end
  48.     # 按下 C 键的情况下
  49.     if Input.trigger?(Input::C)
  50.       # 同伴人数为 0、存档、游戏结束以外的场合
  51.       if $game_party.actors.size == 0 and @command_window.index < 4
  52.         # 演奏冻结 SE
  53.         $game_system.se_play($data_system.buzzer_se)
  54.         return
  55.       end
  56.       # 命令窗口的光标位置分支
  57.       case @command_window.index
  58.       when 0  # 物品
  59.         # 演奏确定 SE
  60.         $game_system.se_play($data_system.decision_se)
  61.         # 切换到物品画面
  62.         $scene = Scene_Item.new
  63.       when 1  # 特技
  64.         # 演奏确定 SE
  65.         $game_system.se_play($data_system.decision_se)
  66.         # 激活状态窗口
  67.         @command_window.active = false
  68.         @status_window.active = true
  69.         @status_window.index = 0
  70.       when 2  # 装备
  71.         # 演奏确定 SE
  72.         $game_system.se_play($data_system.decision_se)
  73.         # 激活状态窗口
  74.         @command_window.active = false
  75.         @status_window.active = true
  76.         @status_window.index = 0
  77.       when 3  # 状态
  78.         # 演奏确定 SE
  79.         $game_system.se_play($data_system.decision_se)
  80.         # 激活状态窗口
  81.         @command_window.active = false
  82.         @status_window.active = true
  83.         @status_window.index = 0
  84.       when 4  # 存档
  85.         # 禁止存档的情况下
  86.         if $game_system.save_disabled
  87.           # 演奏冻结 SE
  88.           $game_system.se_play($data_system.buzzer_se)
  89.           return
  90.         end
  91.         # 演奏确定 SE
  92.         $game_system.se_play($data_system.save_se)
  93.         # 切换到存档画面
  94.         save = Scene_Save.new
  95.         save.qsave
  96.       when 5  # 游戏结束
  97.         # 演奏确定 SE
  98.         $game_system.se_play($data_system.decision_se)
  99.         # 切换到游戏结束画面
  100.         $scene = Scene_End.new
  101.       end
  102.       return
  103.     end
  104.   end
  105. end

  106. class Scene_Title
  107.   #--------------------------------------------------------------------------
  108.   # ● 住处理
  109.   #--------------------------------------------------------------------------
  110.   def main
  111.     # 战斗测试的情况下
  112.     if $BTEST
  113.       battle_test
  114.       return
  115.     end
  116.     # 载入数据库
  117.     $data_actors        = load_data("Data/Actors.rxdata")
  118.     $data_classes       = load_data("Data/Classes.rxdata")
  119.     $data_skills        = load_data("Data/Skills.rxdata")
  120.     $data_items         = load_data("Data/Items.rxdata")
  121.     $data_weapons       = load_data("Data/Weapons.rxdata")
  122.     $data_armors        = load_data("Data/Armors.rxdata")
  123.     $data_enemies       = load_data("Data/Enemies.rxdata")
  124.     $data_troops        = load_data("Data/Troops.rxdata")
  125.     $data_states        = load_data("Data/States.rxdata")
  126.     $data_animations    = load_data("Data/Animations.rxdata")
  127.     $data_tilesets      = load_data("Data/Tilesets.rxdata")
  128.     $data_common_events = load_data("Data/CommonEvents.rxdata")
  129.     $data_system        = load_data("Data/System.rxdata")
  130.     # 生成系统对像
  131.     $game_system = Game_System.new
  132.     # 生成标题图形
  133.     [url=home.php?mod=space&uid=114926]@sprite[/url] = Sprite.new
  134.     @sprite.bitmap = RPG::Cache.title($data_system.title_name)
  135.     # 生成命令窗口
  136.     s1 = "新游戏"
  137.     s2 = "继续"
  138.     s3 = "退出"
  139.     @command_window = Window_Command.new(192, [s1, s2, s3])
  140.     @command_window.back_opacity = 160
  141.     @command_window.x = 320 - @command_window.width / 2
  142.     @command_window.y = 288
  143.     # 判定继续的有效性
  144.     # 存档文件一个也不存在的时候也调查
  145.     # 有効为 @continue_enabled 为 true、無効为 false
  146.     @continue_enabled = false
  147.     if FileTest.exist?("Save.rxdata")
  148.       @continue_enabled = true
  149.     end
  150.     # 继续为有效的情况下、光标停止在继续上
  151.     # 无效的情况下、继续的文字显示为灰色
  152.     if @continue_enabled
  153.       @command_window.index = 1
  154.     else
  155.       @command_window.disable_item(1)
  156.     end
  157.     # 演奏标题 BGM
  158.     $game_system.bgm_play($data_system.title_bgm)
  159.     # 停止演奏 ME、BGS
  160.     Audio.me_stop
  161.     Audio.bgs_stop
  162.     # 执行过渡
  163.     Graphics.transition
  164.     # 主循环
  165.     loop do
  166.       # 刷新游戏画面
  167.       Graphics.update
  168.       # 刷新输入信息
  169.       Input.update
  170.       # 刷新画面
  171.       update
  172.       # 如果画面被切换就中断循环
  173.       if $scene != self
  174.         break
  175.       end
  176.     end
  177.     # 装备过渡
  178.     Graphics.freeze
  179.     # 释放命令窗口
  180.     @command_window.dispose
  181.     # 释放标题图形
  182.     @sprite.bitmap.dispose
  183.     @sprite.dispose
  184.   end
  185.   #--------------------------------------------------------------------------
  186.   # ● 命令 : 继续
  187.   #--------------------------------------------------------------------------
  188.   def command_continue
  189.     # 继续无效的情况下
  190.     unless @continue_enabled
  191.       # 演奏无效 SE
  192.       $game_system.se_play($data_system.buzzer_se)
  193.       return
  194.     end
  195.     # 演奏确定 SE
  196.     $game_system.se_play($data_system.load_se)
  197.     # 切换到读档画面
  198.     load = Scene_Load.new
  199.     load.qload
  200.   end
  201. end
复制代码

点评

保存完了不能直接返回地图,我帮你改好了  发表于 2013-9-19 19:55

评分

参与人数 1星屑 +60 收起 理由
myownroc + 60 认可答案,不过我帮你改得更好了一点.

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2744
在线时间
2630 小时
注册时间
2013-1-16
帖子
5657

贵宾

6
发表于 2013-9-19 19:54:49 | 只看该作者
本帖最后由 myownroc 于 2013-9-19 19:57 编辑

解决问题了
  1. #==============================================================================
  2. # 单存档文件系统
  3. # 作者:RyanBern
  4. #------------------------------------------------------------------------------
  5. # 只有一个存档的系统,屏蔽了Scene_Save和SceneLoad
  6. #==============================================================================
  7. class Scene_Save
  8.   # 快速存档
  9.   def qsave
  10.     # 文件名
  11.     filename = "Save.rxdata"
  12.     # 写入存档数据
  13.     file = File.open(filename,"wb")
  14.     write_save_data(file)
  15.     file.close
  16.   end
  17. end
  18. class Scene_Load
  19.   # 快速读档
  20.   def qload
  21.     filename = "Save.rxdata"
  22.     # 读取存档数据
  23.     file = File.open(filename, "rb")
  24.     read_save_data(file)
  25.     file.close
  26.     # 还原 BGM、BGS
  27.     $game_system.bgm_play($game_system.playing_bgm)
  28.     $game_system.bgs_play($game_system.playing_bgs)
  29.     # 刷新地图 (执行并行事件)
  30.     $game_map.update
  31.     # 切换到地图画面
  32.     $scene = Scene_Map.new
  33.   end
  34. end

  35. class Scene_Menu
  36.   #--------------------------------------------------------------------------
  37.   # ● 刷新画面 (命令窗口被激活的情况下)
  38.   #--------------------------------------------------------------------------
  39.   def update_command
  40.     # 按下 B 键的情况下
  41.     if Input.trigger?(Input::B)
  42.       # 演奏取消 SE
  43.       $game_system.se_play($data_system.cancel_se)
  44.       # 切换的地图画面
  45.       $scene = Scene_Map.new
  46.       return
  47.     end
  48.     # 按下 C 键的情况下
  49.     if Input.trigger?(Input::C)
  50.       # 同伴人数为 0、存档、游戏结束以外的场合
  51.       if $game_party.actors.size == 0 and @command_window.index < 4
  52.         # 演奏冻结 SE
  53.         $game_system.se_play($data_system.buzzer_se)
  54.         return
  55.       end
  56.       # 命令窗口的光标位置分支
  57.       case @command_window.index
  58.       when 0  # 物品
  59.         # 演奏确定 SE
  60.         $game_system.se_play($data_system.decision_se)
  61.         # 切换到物品画面
  62.         $scene = Scene_Item.new
  63.       when 1  # 特技
  64.         # 演奏确定 SE
  65.         $game_system.se_play($data_system.decision_se)
  66.         # 激活状态窗口
  67.         @command_window.active = false
  68.         @status_window.active = true
  69.         @status_window.index = 0
  70.       when 2  # 装备
  71.         # 演奏确定 SE
  72.         $game_system.se_play($data_system.decision_se)
  73.         # 激活状态窗口
  74.         @command_window.active = false
  75.         @status_window.active = true
  76.         @status_window.index = 0
  77.       when 3  # 状态
  78.         # 演奏确定 SE
  79.         $game_system.se_play($data_system.decision_se)
  80.         # 激活状态窗口
  81.         @command_window.active = false
  82.         @status_window.active = true
  83.         @status_window.index = 0
  84.       when 4  # 存档
  85.         # 禁止存档的情况下
  86.         if $game_system.save_disabled
  87.           # 演奏冻结 SE
  88.           $game_system.se_play($data_system.buzzer_se)
  89.           return
  90.         end
  91.         # 演奏确定 SE
  92.         $game_system.se_play($data_system.save_se)
  93.         # 切换到存档画面
  94.         save = Scene_Save.new
  95.         save.qsave
  96.         $scene = Scene_Map.new
  97.       when 5  # 游戏结束
  98.         # 演奏确定 SE
  99.         $game_system.se_play($data_system.decision_se)
  100.         # 切换到游戏结束画面
  101.         $scene = Scene_End.new
  102.       end
  103.       return
  104.     end
  105.   end
  106. end

  107. class Scene_Title
  108.   #--------------------------------------------------------------------------
  109.   # ● 住处理
  110.   #--------------------------------------------------------------------------
  111.   def main
  112.     # 战斗测试的情况下
  113.     if $BTEST
  114.       battle_test
  115.       return
  116.     end
  117.     # 载入数据库
  118.     $data_actors        = load_data("Data/Actors.rxdata")
  119.     $data_classes       = load_data("Data/Classes.rxdata")
  120.     $data_skills        = load_data("Data/Skills.rxdata")
  121.     $data_items         = load_data("Data/Items.rxdata")
  122.     $data_weapons       = load_data("Data/Weapons.rxdata")
  123.     $data_armors        = load_data("Data/Armors.rxdata")
  124.     $data_enemies       = load_data("Data/Enemies.rxdata")
  125.     $data_troops        = load_data("Data/Troops.rxdata")
  126.     $data_states        = load_data("Data/States.rxdata")
  127.     $data_animations    = load_data("Data/Animations.rxdata")
  128.     $data_tilesets      = load_data("Data/Tilesets.rxdata")
  129.     $data_common_events = load_data("Data/CommonEvents.rxdata")
  130.     $data_system        = load_data("Data/System.rxdata")
  131.     # 生成系统对像
  132.     $game_system = Game_System.new
  133.     # 生成标题图形
  134.     [url=home.php?mod=space&uid=114926]@sprite[/url] = Sprite.new
  135.     @sprite.bitmap = RPG::Cache.title($data_system.title_name)
  136.     # 生成命令窗口
  137.     s1 = "新游戏"
  138.     s2 = "继续"
  139.     s3 = "退出"
  140.     @command_window = Window_Command.new(192, [s1, s2, s3])
  141.     @command_window.back_opacity = 160
  142.     @command_window.x = 320 - @command_window.width / 2
  143.     @command_window.y = 288
  144.     # 判定继续的有效性
  145.     # 存档文件一个也不存在的时候也调查
  146.     # 有効为 @continue_enabled 为 true、無効为 false
  147.     @continue_enabled = false
  148.     if FileTest.exist?("Save.rxdata")
  149.       @continue_enabled = true
  150.     end
  151.     # 继续为有效的情况下、光标停止在继续上
  152.     # 无效的情况下、继续的文字显示为灰色
  153.     if @continue_enabled
  154.       @command_window.index = 1
  155.     else
  156.       @command_window.disable_item(1)
  157.     end
  158.     # 演奏标题 BGM
  159.     $game_system.bgm_play($data_system.title_bgm)
  160.     # 停止演奏 ME、BGS
  161.     Audio.me_stop
  162.     Audio.bgs_stop
  163.     # 执行过渡
  164.     Graphics.transition
  165.     # 主循环
  166.     loop do
  167.       # 刷新游戏画面
  168.       Graphics.update
  169.       # 刷新输入信息
  170.       Input.update
  171.       # 刷新画面
  172.       update
  173.       # 如果画面被切换就中断循环
  174.       if $scene != self
  175.         break
  176.       end
  177.     end
  178.     # 装备过渡
  179.     Graphics.freeze
  180.     # 释放命令窗口
  181.     @command_window.dispose
  182.     # 释放标题图形
  183.     @sprite.bitmap.dispose
  184.     @sprite.dispose
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # ● 命令 : 继续
  188.   #--------------------------------------------------------------------------
  189.   def command_continue
  190.     # 继续无效的情况下
  191.     unless @continue_enabled
  192.       # 演奏无效 SE
  193.       $game_system.se_play($data_system.buzzer_se)
  194.       return
  195.     end
  196.     # 演奏确定 SE
  197.     $game_system.se_play($data_system.load_se)
  198.     # 切换到读档画面
  199.     load = Scene_Load.new
  200.     load.qload
  201.   end
  202. end
复制代码
(Created by @喵kano)


施工现场:hotege.github.io
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-29 23:26

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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