You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 13:32:39