如何在GameMaker关卡推进类游戏中保存玩家关卡进度
GameMaker 关卡进度保存与恢复实现方案
一、保存当前关卡
触发时机
选择以下任一合适时机执行保存逻辑:
- 成功进入新关卡后(对应关卡房间的
Room Start事件) - 游戏退出前(全局对象的
Game End事件,或窗口关闭事件)
实现代码
方式1:用文本文件存储(极简方案)
// 假设全局变量global.current_level存储当前关卡编号(如7) var save_file = file_text_open_write("save_level.txt"); file_text_write_string(save_file, string(global.current_level)); file_text_close(save_file);
方式2:用INI文件存储(更规范,便于后续扩展)
ini_open("save_data.ini"); ini_write_real("Progress", "CurrentLevel", global.current_level); ini_close();
二、启动游戏时恢复进度
在游戏初始房间(如标题页、初始化房间)的Create事件中添加读取逻辑:
文本文件方式
if file_exists("save_level.txt") { var save_file = file_text_open_read("save_level.txt"); global.current_level = real(file_text_read_string(save_file)); file_text_close(save_file); // 跳转到对应关卡房间,需替换为你的关卡房间命名规则 room_goto(asset_get_index("Level_" + string(global.current_level))); } else { // 无存档时默认从第1关开始 global.current_level = 1; room_goto(asset_get_index("Level_1")); }
INI文件方式
if file_exists("save_data.ini") { ini_open("save_data.ini"); // 读取失败时默认返回1 global.current_level = ini_read_real("Progress", "CurrentLevel", 1); ini_close(); room_goto(asset_get_index("Level_" + string(global.current_level))); } else { global.current_level = 1; room_goto(asset_get_index("Level_1")); }
注意事项
- 提前在全局对象的
Create事件中初始化global.current_level,确保变量全局可访问。 - GameMaker默认将文件存储在游戏的可写目录,可通过
working_directory变量查看具体路径,避免路径错误。 - 建议在关卡房间的
Room Start事件中更新并保存global.current_level,确保存档的是玩家实际进入的关卡。
内容的提问来源于stack exchange,提问作者T14Seara
相关产品推荐
相关产品推荐

