http_get_file

使用此函数,您可以连接到指定的 URL,以便以文件的形式检索信息。 由于这是一个异步函数,GameMaker 在等待回复时不会阻塞,而是会继续运行,除非它获得回调信息。 此信息将采用字符串形式,并会在对象属性中定义的任何实例中触发异步事件

注意 您应该知道,由于浏览器中的 XSS 保护,跨域请求和加载资源的尝试会被阻止,并且可能会返回空白结果。 有关更多详细信息,请参阅跨域问题部分。

此函数将生成多个“回调”,这些回调由任何 HTTP 事件获取。 这些将生成专用于该事件并存储在特殊变量 async_load 中的 DS map(通常称为“字典”)。 根据是否有数据返回,此 DS 映射将包含不同的值。 例如,如果您请求了一个文件,该事件将在收到每个数据包时触发多次,以便您可以显示进度条等。 DS 映射的一般结构如下:

如果有多个数据包返回到您的游戏,回调“status”键将返回 1,在这种情况下,DS 地图将具有以下附加键:

 

语法:

http_get_file(url, local_target);

参数类型描述
urlString您希望从中获取文件的服务器的 Web 地址
local_targetString要将文件保存到的本地存储路径

 

返回:

Async Request ID

 

扩展示例:

http_get_file() 函数可以从任何事件调用,并且由于它是异步的,回调几乎可以是即时的,也可能需要几秒钟。 调用函数很简单,看起来像这样:

file = http_get_file("http://www.macsweeneygames.com/downloads/upgrade.zip", "\Downloads\Upgrade.zip");

上面的代码将从给定的 URL 请求一个文件,并将其设置为下载到本地存储区域(如 HTML5 游戏选项中指定的那样),在具有给定文件名的目录“下载”中(这不一定是 与源文件名相同,但应使用相同的文件扩展名)。 async_load 地图索引将存储在变量“文件”中,因此您可以在异步事件中检查正确的回调,如果保存目录不存在,则会创建它。 触发的异步事件将是 HTTP 子事件,在那种情况下,您会遇到类似以下内容的事件:

if (ds_map_find_value(async_load, "id") == file)
{
    var status = ds_map_find_value(async_load, "status");
    if (status == 0)
    {
        var path = ds_map_find_value(async_load, "result");
        var files = zip_unzip(path, "/NewContent/");
        if (files > 0)
        {
            global.ExtraContent = true;
        }
    }
}

上面的代码将首先检查已创建的 ds_map 的“id”,然后检查回调的状态。 如果该值等于 0(表示成功),回调的结果将与 zip_unzip() 函数一起使用,将下载的文件解压缩到给定目录。 如果解压缩成功,全局变量将设置为 true。