GameMaker Studio 2

创建于:2017-04-19

创建人: dougen

189 信息 1069 成员
游戏开发工具 GameMaker Studio 2 的讨论小组

RPG_Basic(26): 读取存档的简单方式

Linpean 2017-10-18

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下


至此存档就完成了

近期喜欢的会员

 

加入 indienova

  • 建立个人/工作室档案
  • 建立开发中的游戏档案
  • 关注个人/工作室动态
  • 寻找合作伙伴共同开发
  • 寻求线上发行
  • 更多服务……
登录/注册