F5 # 存档
F6 # 读档
F7 # 增加存档编号
F8 # 减少存档编号
支持9个存档
大部分更新了模块变量(所谓模块变量实际包括模块或类的实例变量和类变量)和全局变量部分代码。具体如下:
#--------------------------------------------------------------------------
# ● 循环遍历模块自身内部的所有类和模块(以下这种情况的 @dmy 不会被保存)
#--------------------------------------------------------------------------
# ! class A
# class B
# @dmy = 54
# end
# end
def each_module_variables(ref_hash, mod)
mod.constants.each do |const|
klassname = format("%s::%s", mod.name, const)
if (klass = eval(klassname)).is_a?(Module)
if klass.respond_to? :marshal_dump
ref_hash[klassname] = [klass.marshal_dump]
else
if not (varnames = klass.class_variables + klass.instance_variables).empty?
hash = {}
varnames.each{|var| hash[var] = klass.module_eval(var)}
ref_hash[klassname] = hash
end
end
each_module_variables(ref_hash, klass) if klass.instance_of?(Module)
end
end
end
#--------------------------------------------------------------------------
# ● marshal_dump模块变量(所谓模块变量实际包括模块或类的实例变量和类变量)
#
# 如果模块或类中定义了 self.marshal_dump 方法则调用改方法进行marshal_dump
# 于此同时模块或类中必须定义一个 self.marshal_load(obj) 方法负责数据的还原
#
# 其他情况则默认方法进行存取
#--------------------------------------------------------------------------
def marshal_dump_module_variables(mod = Object)
hash = {}
each_module_variables(hash, mod)
return hash
end
#--------------------------------------------------------------------------
# ● marshal_load模块变量
#--------------------------------------------------------------------------
def marshal_load_module_variables(ref_hash)
ref_hash.each do |klassname, var_hash|
klass = eval(klassname)
if var_hash.is_a?(Array)
if klass.respond_to? :marshal_load
klass.marshal_load(var_hash[0])
else
raise TypeError.new(format("%s needs to have method `marshal_load'", klass.name))
end
else
var_hash.each{|key, value| klass.module_eval("#{key} = value")}
end
end
end
#--------------------------------------------------------------------------
# ● marshal_dump必要的全局变量(可以在这里添加)
#--------------------------------------------------------------------------
def marshal_dump_global_variables
# global_variables # 参考使用- -b
end
#--------------------------------------------------------------------------
# ● marshal_load全局变量
#--------------------------------------------------------------------------
def marshal_load_global_variables(ref_hash)
end
这两组函数都被设计成可返回任意类型对象,同Marshal模块中的 marshal_dump和marshal_load。对于模块变量的保存,如果相应类和模块中存在self.marshal_dump和self.marshal_load则会调用该组函数进行存储和读取。
更新了位图存储方式,把原来的数据存储更改为存储操作步骤。现在速度快、存储文件小、当然出现bug的几率也更大- -b
# 这里注释掉了 重新设置地图事件会造成$game_map中characters同Sprite_Character
# 中的@character不一致
# # 魔法编号与保存时有差异的情况下
# 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
# # 刷新地图 (执行并行事件)
# $game_map.update
没更新什么代码 只是注释掉了这段可能引起对象引用不一致的代码 以前考虑多了= =ORZ
修正了1.0中未保存位图字体对象的问题。
self.send :initialize, *args
get_ins_vars_key_value_hash
set_ins_vars_key_value
mgd = MarshalGameData.new
mgd.game_temp = $game_temp
mgd.game_system = $game_system
# dump
Marshal.dump(mgd, file)
Marshal.dump($game_temp, file)
Marshal.dump($game_system, file)
以下引用霜冻之狼于2009-2-15 12:04:48的发言:
每帧都可以存档....这样不卡吗...
以下引用凌辰于2009-2-15 12:07:01的发言:
如果是非正常退出也能存下来?
那就太好了……
以下引用霜冻之狼于2009-2-15 12:09:15的发言:
........这样不太好吧
比如刚好播放动画或者改变画面色调的时候,玩家就存档...
然后再读档玩,会发现这两个命令失效了...
不如改成出错时存档.....
[本贴由作者于 2009-2-15 12:09:38 最后编辑]
以下引用灼眼的夏娜于2009-2-15 12:11:38的发言:
读档依然是刚播放动画 刚改变色调的时候的。。。= =
以下引用霜冻之狼于2009-2-15 12:20:45的发言:
以下引用灼眼的夏娜于2009-2-15 12:11:38的发言:
读档依然是刚播放动画 刚改变色调的时候的。。。= =
夏娜可以试下动画播放到一半的时候存档,
读档后你会发现动画没有继续播放...
以下引用小柯于2009-2-15 15:26:44的发言:
因为我做的一个游戏有这个需要,
所以用某个其他的脚本凑了一个……
就是柳柳写的可以通过事件脚本来存档的脚步,
运用那个,并行一个事件就好了……好在就是就算每帧都存也不会卡。
那么按键自存的话大概就是并行的时候价格按键判断吧。
似乎不管什么时候并行事件都在运行……
[本贴由作者于 2009-2-15 15:27:50 最后编辑]
以下引用灼眼的夏娜于2009-2-15 15:30:12的发言:
以下引用小柯于2009-2-15 15:26:44的发言:
因为我做的一个游戏有这个需要,
所以用某个其他的脚本凑了一个……
就是柳柳写的可以通过事件脚本来存档的脚步,
运用那个,并行一个事件就好了……好在就是就算每帧都存也不会卡。
那么按键自存的话大概就是并行的时候价格按键判断吧。
似乎不管什么时候并行事件都在运行……
[本贴由作者于 2009-2-15 15:27:50 最后编辑]
默认的存档事件运行中无法存档的。。。 该存档保证在任何情况下 包括对话文字刚显示一个字 动画刚播放一半等情况都可以存档= =
发现了利用此功能的刷法……
逃跑之前存,失败就读,再失败再读,知道逃成功为止。
某些一次游戏下来只能答一次的难题,存后答。
抽奖时存档……
以下引用hide秀于2009-2-17 7:13:44的发言:
我最爱的 怨念系列 又出拉
这强大的玩意儿终于完成了
PS:我终于归来了
[本贴由作者于 2009-2-17 7:14:54 最后编辑]
以下引用hide秀于2009-2-17 7:13:44的发言:
我最爱的 怨念系列 又出拉
这强大的玩意儿终于完成了
PS:我终于归来了
[本贴由作者于 2009-2-17 7:14:54 最后编辑]
以下引用ondine于2009-2-17 9:13:19的发言:
欢迎归来= =
夏娜半夜跑上来发的- =
以下引用灼眼的夏娜于2009-2-17 11:39:39的发言:
以下引用hide秀于2009-2-17 7:13:44的发言:
我最爱的 怨念系列 又出拉
这强大的玩意儿终于完成了
PS:我终于归来了
[本贴由作者于 2009-2-17 7:14:54 最后编辑]
欢迎归来- - 这个东西V1.3好了= = 还没更新咳咳- -
以下引用ondine于2009-2-17 9:13:19的发言:
欢迎归来= =
夏娜半夜跑上来发的- =
= =起始昨天半夜没发 - -\\
以下引用沉影不器于2009-2-17 21:57:46的发言:
哇,发现强大的东西了
即是说给所有游戏里用到的类都写好Marshal_dump这样子?那么transition的时候怎么记录呢?
以下引用沉影不器于2009-2-17 22:17:34的发言:
正想测试transition...
早期版本是直接保存位图矩阵是吧...如今改成*arg了...真是好办法
--------------------------------
我想请问Scene_Base有什么作用?
以下引用yue于2009-2-17 22:29:05的发言:
为什么出现BUG的几率会更大……
如果那样的话……不好……
语言贫乏了……
现在就是问,如果全部都是商业素材的游戏,存起来会不会很卡?会不会出现直接退出或者脚本备份的错误?
以下引用灼眼的夏娜于2009-2-17 22:41:02的发言:
以前直接存储图像数据简单容易。。但速度慢 存储文件大。。 最新版本改为存储位图操作步骤,淡然存储文件会小很多很多 速度也很几十倍。。但 有可能造成脚本冲突等 所以出现bug的几率会更大 当然 虽然更大 = = 那也是很小的可能。。= =
最新版本不会存储图像数据 所以不论是否是商业游戏素材 也不会卡的。。
[本贴由作者于 2009-2-17 22:41:14 最后编辑]
以下引用凌辰于2009-2-15 12:14:33的发言:
这样的话,就可以做到剧情进行时存档?
像AVG那样么……也好。
当年玩黑剑时剧情到一半我妈叫吃饭,等剧情完等很久- -
以下引用wyongcan2008于2009-4-19 12:43:26的发言:
在那个播放动画的地方存档,再读档,本来要播放的声音就没了。
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |