赞 | 1 |
VIP | 0 |
好人卡 | 1 |
积分 | 1 |
经验 | 5436 |
最后登录 | 2023-1-31 |
在线时间 | 585 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 68
- 在线时间
- 585 小时
- 注册时间
- 2013-5-25
- 帖子
- 1524
|
纠正用语:说明是xx.rxdata被二次赋值了 在此处应当是覆盖
翻到默认脚本Scene_Load页往下看- #--------------------------------------------------------------------------
- # ● 读取存档数据
- # 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
复制代码 file为之前生成的文件对象- # 读取存档数据
- file = File.open(filename, "rb")
- read_save_data(file)
复制代码 那么这个文件是怎么生成的呢
我们再把脚本翻到Scene_Save这一页- #--------------------------------------------------------------------------
- # ● 写入存档数据
- # file : 写入用文件对像 (已经打开)
- #--------------------------------------------------------------------------
- def write_save_data(file)
- # 生成描绘存档文件用的角色图形
- characters = []
- for i in 0...$game_party.actors.size
- actor = $game_party.actors[i]
- characters.push([actor.character_name, actor.character_hue])
- end
- # 写入描绘存档文件用的角色数据
- Marshal.dump(characters, file)
- # 写入测量游戏时间用画面计数
- Marshal.dump(Graphics.frame_count, file)
- # 增加 1 次存档次数
- $game_system.save_count += 1
- # 保存魔法编号
- # (将编辑器保存的值以随机值替换)
- $game_system.magic_number = $data_system.magic_number
- # 写入各种游戏对像
- Marshal.dump($game_system, file)
- Marshal.dump($game_switches, file)
- Marshal.dump($game_variables, file)
- Marshal.dump($game_self_switches, file)
- Marshal.dump($game_screen, file)
- Marshal.dump($game_actors, file)
- Marshal.dump($game_party, file)
- Marshal.dump($game_troop, file)
- Marshal.dump($game_map, file)
- Marshal.dump($game_player, file)
- end
复制代码 通过比较默认脚本的读写、你能得出什么结论
结论就是、用save_data无法达到这个目的
因此,你需要了解Marshal这个模块
引用自自带帮助文档
Marshal
您可以使用该模块把 Ruby 对象写入文件(或字符串)保存起来,或者重新读取并生成该对象。
模块函数Marshal.dump(obj[, port][, limit])
把 obj 递归地写入文件。
File 和 MatchData 的实例,定义了特殊方法的对象等,不能被写入文件。若对这些不能被写入文件的对象使用该函数时,会引发 TypeError 异常。
可以向 port 指定一个 IO(或其子类)的实例。此时将返回 port。缺省时 dump 会返回保存着对象的字符串。
若使用了 limit 时,将只会保存 limit 层以内的关联对象(默认值为100层)。若将 limit 指定为负值时,将不会进行层数检查。
Marshal.load(port)
从 port 读入 marshal 数据(Marshal.dump 输出的的字符串)后生成一个与原对象状态相同的对象。port 可以是字符串或 IO(或其子类)的实例。
当然针对这个问题你不需要这么复杂
写入
- file = File.open("xx.rxdata","wb")
- $game_variables[31]=500
- $game_variables[32]=200
- Marshal.dump($game_variables[31],file)
- Marshal.dump($game_variables[32],file)
- file.close
复制代码 读取
- file = File.open("xx.rxdata","rb")
- $game_variables[31] = Marshal.load(file)
- $game_variables[32] = Marshal.load(file)
复制代码 |
评分
-
查看全部评分
|