RPG_Basic(26): 读取存档的简单方式
Youtube视频地址:HeartBeast
读档和存档复杂的部分(tricky part)不是如何读取存档信息,复杂的是找到合适的时机和合适的方式去处理信息。
三个部分
1.当我们暂停游戏后,回到场景
2.当我们传送到下一个房间(场景时)
以上两个事件都包含room start 事件(在房间开始初始化时)
3.当我们在pause_menu中,选择Load时
## 创建三个宏变量来代表以上三种情形(Scenarios)
PS:由于GMS2取消了GMS1的All Config的声明Macro变量的方式,我这里采用在第一个房间的初始化
RETURN = 0;
NEW_ROOM = 1;
LOAD = 2;
## 在obj_player_stats对象中的Create事件中,创建ex,ey变量用来实时储存玩家的位置,以便读档时调用
如果存在玩家对象,就记录当前位置
如果不存在,就令其 = (0,0)
将房间开始动作,声明为NEW_ROOM。
### 创建scr_load_game脚本
先定义临时file变量来存储已经打开的存档文件
然后再以读取文本的格式来打开该文件,并赋值给临时变量save_string.关闭文件。
因为信息是经过base64加密的,再次读取信息需要解密
json_decode()解码出来的变量会被GMS2自动转为DS_map结构。
然后依次将其中的信息取出来
然后销毁这个DS_map结构
## 然后在obj_player_stats事件中,选择创建other event中的room_start事件,来储存玩家的开始位置
在从(obj_player_stats对象的step事件中)之前的房间进入到暂停菜单前,需要开启房间的数据持久化
同时需要在返回之前的房间前,记录这个返回操作为room_start_action,并且它的类型为RETURN
然后再在obj_player的room_start事件中,开启obj_player的数据持久化(以便读取功能生效)
然后回到obj_pause_menu的step事件中,补全case2中的储存的游戏的代码:
调用obj_player_stats的room_start_action动画,然后前往obj_player_stats记录的房间
然后运行游戏,在第一个房间先save存档,开始穿过传送门,打开Menu菜单load游戏,报一个错误
它的意思是想要读取的文件"file"没有被打开。回到scr_load_game脚本,发现原因是错误使用的save.txt的命名,将其修改为在25节中的文件命名“mysavegame.txt”
再次运行游戏,重复存档,读档操作,发现读档后,场景发生了变化,但是角色对象实例没有被创建出来
回到scr_save_game,修改错误的x,y赋值,令其等于之前的储存的玩家位置
移除在obj_player_stats对象的step事件中的room_start_action动作
将其移动到obj_pause_menu的step事件中的case1下
至此存档就完成了