Project1
标题:
如何将数据写入存档
[打印本页]
作者:
未命名
时间:
2016-1-12 11:04
标题:
如何将数据写入存档
本帖最后由 未命名 于 2016-1-14 23:34 编辑
请问要如何写入部分数据(比如说变量,开关等)写入存档?
我的游戏中,主角在一段剧情之后就来到一个基地,然后以基地为中心到不同迷宫探险,而迷宫中不能存档,只能在基地存档。
但我想要实现在迷宫中获得道具(依然是变量),或是触发了什么事件后,能够将数据写入存档。这样就能避免玩家在没有回到基地的情况下退出游戏,导致迷宫中探险的进度消失。
于是我想每次载入存档时,主角将在默认的地点(基地)出现,然而迷宫的进程依然有记录。
所以需要的是只要将发生改变的数据(变量开关)写入存档,其他保持不变就可以了。
自己试过的一些方法
目前这个效果的实现不是很重要,只要保证玩家正常返回就可以,而且也可以用上面那些“不正式”的方法,
但是我依然希望能够实现这样的效果,可能将来会用到。
同时我也希望能够收集些其他“不正试”的方法去实现相同的效果,所以有什么想法都可以提出来。
作者:
刺夜之枪
时间:
2016-1-12 11:25
#==============================================================================
# ■ 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)
# 读取测量游戏时间用画面计数
Graphics.frame_count = Marshal.load(file)
# 读取各种游戏对像
$game_temp = Game_Temp.new
$game_system = Game_System.new
crap = Marshal.load(file)
$game_switches = Marshal.load(file)
$game_variables = Marshal.load(file)
$game_self_switches = Game_SelfSwitches.new
$game_screen = Game_Screen.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
# 设置初期同伴位置
$game_party.setup_starting_members
# 设置初期位置的地图
$game_map.setup($data_system.start_map_id)
# 主角向初期位置移动
$game_player.moveto($data_system.start_x, $data_system.start_y)
# 刷新主角
$game_player.refresh
# 执行地图设置的 BGM 与 BGS 的自动切换
$game_map.autoplay
# 魔法编号与保存时有差异的情况下
# (加入编辑器的编辑过的数据)
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
复制代码
这个代码的功能是只每次读取村当时,只读取变量开关等数据,别的都以新游戏的标准开始。
不知道有帮助吗?
然后关于第二个问题,我还在看
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1