buffer_save_async

该函数将缓冲区的部分内容异步保存到文件中,准备好使用任何 buffer_load_* 函数读回内存。

"offset" 定义了缓冲区内保存的起始位置 (以字节为单位),"size" 是从该偏移量开始保存的缓冲区的大小 (也以字节为单位)。此功能异步工作,因此游戏在保存时将继续运行,并且使用此功能保存的所有文件将被放置在 " 默认 " 文件夹中。该文件夹 不需要 包含在文件名中,因为它是由 GameMaker 自动添加的。例如,文件名路径 "Data\Player_Save.sav" 实际上会保存到 "default\Data\Player_Save.sav"。不过,如果您随后使用函数 buffer_load_async 加载文件,则也无需提供路径的 " 默认 " 部分 (但任何其他文件函数 需要它, Xbox One、PS4 和 Nintendo Switch 游戏机除外)。

注意 在 HTML5 上,"default/" 不会自动添加,您可能必须在代码中考虑到这一点。

该函数将返回唯一的 ID 值并触发 异步保存 / 加载事件 ,您可以在其中使用返回的 ID 来检查 async_load 的 ID 值,如扩展示例中所示以下。事件中的 async_load 映射将具有以下两个键 / 值对:

请注意,您可以通过在调用 buffer_async_group_beginbuffer_async_group_end 之间多次调用此函数,将多个缓冲区保存在一个缓冲区中 (请参阅这些函数有关此的更多信息)。

注意 在 HTML5 上,返回的结果在保存到文件时会保存为 Base64 编码的字符串。

 

语法:

buffer_save_async(buffer, filename, offset, size);

参数类型描述
bufferBuffer要保存的缓冲区。
filenameString要另存为的文件名。
offsetReal缓冲区内用于保存的偏移(以字节为单位)。
sizeReal要保存的缓冲区的大小(以字节为单位)。

 

返回:

Async Request ID

 

例子:

buffer_save_async 函数可以从任何事件调用,并且由于它是异步的,因此回调几乎是瞬时的,也可能需要几秒钟的时间。调用该函数很简单,如下所示:

saveid = buffer_save_async(buff, "Player_Save.sav", 0, 16384);

上述代码将缓冲区 buff 的内容保存到给定的保存文件,并将函数调用的 ID 存储在变量 saveid 中。保存完成后,将触发异步 Save / Load 事件,您可以解析 async_load 映射以获取函数的正确 ID,如下所示:

if (ds_map_find_value(async_load, "id") == saveid)
{
    if (ds_map_find_value(async_load, "status") == false)
    {
        show_debug_message("Save failed!");
    }
}

上面的代码将首先检查已创建的 DS 地图的 ID,然后检查回调的状态,如果有任何问题,则发布调试消息。