| 赞 | 58 |
| VIP | |
| 好人卡 | |
| 积分 | 12 |
| 经验 | |
| 最后登录 | 2023-5-29 |
| 在线时间 | 1017 小时 |
- 梦石
- 0
- 星屑
- 1232
- 在线时间
- 1017 小时
- 注册时间
- 2011-4-30
- 回帖
- 1464
|
发表于 2015-10-6 08:05:16
|
显示全部楼层
本帖最后由 汪汪 于 2015-10-6 08:47 编辑
存档就是一个保存有数据的文件...当然你也可以为空.
如何联动之前通关存档的数据呢?
这个存档+读档就可以了.
额,使用下面的方法的确可以实现,不过好像没什么必要.....比如 数据清空什么的,其实可以通过读取初始时的存档实现,
其实我也没做过二周目,不过应该只是一个存档读档的问题
点击展开/收起
#==============================================================================
# ■ Scene_Save
#------------------------------------------------------------------------------
# 处理存档画面的类。
#==============================================================================
class Scene_Save < Scene_File
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
def initialize
super("要保存到这个文件吗?")
end
#--------------------------------------------------------------------------
# ● 确定时的处理
#--------------------------------------------------------------------------
def on_decision(filename)
# 演奏存档 SE
$game_system.se_play($data_system.save_se)
# 写入存档数据
file = File.open(filename, "wb") #这句是打开 一个文件(文件名为 变量filename 的值)
write_save_data(file) # 这里是使用 写入数据 的方法
file.close #关上文件
# 如果被事件调用
if $game_temp.save_calling
# 清除存档调用标志
$game_temp.save_calling = false
# 切换到地图画面
$scene = Scene_Map.new
return
end
# 切换到菜单画面
$scene = Scene_Menu.new(4)
end
#--------------------------------------------------------------------------
# ● 取消时的处理
#--------------------------------------------------------------------------
def on_cancel
# 演奏取消 SE
$game_system.se_play($data_system.cancel_se)
# 如果被事件调用
if $game_temp.save_calling
# 清除存档调用标志
$game_temp.save_calling = false
# 切换到地图画面
$scene = Scene_Map.new
return
end
# 切换到菜单画面
$scene = Scene_Menu.new(4)
end
#--------------------------------------------------------------------------
# ● 写入存档数据
# file : 写入用文件对像 (已经打开)
#--------------------------------------------------------------------------
def write_save_data(file) #如上面说的
# 生成描绘存档文件用的角色图形
characters = []
for i in 0...$game_party.actors.size
actor = $game_party.actors
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
end
#==============================================================================
# ■ Scene_Load
#------------------------------------------------------------------------------
# 处理读档画面的类。
#==============================================================================
class Scene_Load < 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_Title.new
end
#--------------------------------------------------------------------------
# ● 读取存档数据
# file : 读取用文件对像 (已经打开)
#--------------------------------------------------------------------------
def read_save_data(file)
# 读取描绘存档文件用的角色数据
characters = Marshal.load(file) # 可以对比存档的脚本, Marshal.dump(characters, file)
# 读取测量游戏时间用画面计数
Graphics.frame_count = Marshal.load(file) # 可以对比存档的脚本, Marshal.dump(Graphics.frame_count, file)
# 读取各种游戏对像
$game_system = Marshal.load(file) # 可以对比存档的脚本, Marshal.dump($game_system, file)
$game_switches = Marshal.load(file) # 可以对比存档的脚本, Marshal.dump($game_switches, file)
$game_variables = Marshal.load(file) # 可以对比存档的脚本, Marshal.dump($game_variables, file)
$game_self_switches = Marshal.load(file) # 可以对比存档的脚本, Marshal.dump($game_self_switches, file)
$game_screen = Marshal.load(file) # 可以对比存档的脚本, Marshal.dump($game_screen, file)
$game_actors = Marshal.load(file) # 可以对比存档的脚本, Marshal.dump($game_actors, file)
$game_party = Marshal.load(file) # 可以对比存档的脚本, Marshal.dump($game_party, file)
$game_troop = Marshal.load(file) # 可以对比存档的脚本, Marshal.dump($game_troop, file)
$game_map = Marshal.load(file) # 可以对比存档的脚本, Marshal.dump($game_map, file)
$game_player = Marshal.load(file) # 可以对比存档的脚本, Marshal.dump($game_player, 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
如果只保存一部分的数据,再只读取一部分的数据,此时不会完全变成存档时的样子,只有保存和读取部分的数据是存档时的..
在存档读档时也可以弄一个临时的变量,自己弄一些判断,处理一下临时的变量再处理事关游戏全局的变量 (那些$开头的),
当然也可以存一些私货,
比如存档时
characters = []
for i in 0...$game_party.actors.size
actor = $game_party.actors
characters.push([actor.character_name, actor.character_hue])
end
# 写入描绘存档文件用的角色数据
Marshal.dump(characters, file)
就是把 描绘存档文件用的角色数据 写了进去
在
#==============================================================================
# ■ Window_SaveFile
#------------------------------------------------------------------------------
# 显示存档以及读档画面、保存文件的窗口。
#==============================================================================
里
就只读取了存档的一部分 ,
def initialize(file_index, filename)
super(0, 64 + file_index % 4 * 104, 640, 104)
self.contents = Bitmap.new(width - 32, height - 32)
@file_index = file_index
@filename = "Save#{@file_index + 1}.rxdata"
@time_stamp = Time.at(0)
@file_exist = FileTest.exist?(@filename)
if @file_exist
file = File.open(@filename, "r")
@time_stamp = file.mtime
@characters = Marshal.load(file) #这个就是 读取了 描绘存档文件用的角色数据,所以读档画面里才有了当时的角色的 图像,
@frame_count = Marshal.load(file)
@game_system = Marshal.load(file)
@game_switches = Marshal.load(file)
@game_variables = Marshal.load(file)
@total_sec = @frame_count / Graphics.frame_rate
file.close
end
refresh
@selected = false
end
|
评分
-
查看全部评分
|