文件系统

GameMaker中使用文件系统函数包含的文件时,了解文件系统如何工作以及幕后发生了什么是很重要的。本节旨在解释和澄清如何存储内容,存储位置以及该系统可能存在的限制或解决方案。

关于文件功能,首先要注意的是,它们通常和默认情况下仅限于沙箱。这意味着,如果没有用户的显式输入,GameMaker无法从不是游戏包或设备本地存储的任何地方保存或加载文件,即使这样,这种输入也仅限于Windows,macOS和Ubuntu(Linux)目标平台。

重要信息可以关闭桌面目标上的沙箱(Windows、macOS和Ubuntu),方法是在目标平台的游戏选项中选中禁用文件系统沙箱选项。您需要自担风险,虽然这将打开文件保存和加载,并允许您访问给定系统上的任何位置的文件,它可能仍然受到OS许可的限制。

文件区域

要理解沙盒,首先需要了解文件有两个不同的区域:

下面的图表可以帮助你更好地理解这一点:

File System Save Areas

访问文件区域

当您的游戏被沙盒化时,每个目标平台上只有两个目标区域-捆绑文件保存区域,但它们在每个平台上的工作方式略有不同。但是,GameMaker已经抽象出了什么可以做,什么不可以做的主要本质,使您可以更轻松地将游戏重新定位到多个环境。

首先,让我们看看如何在GameMaker中查找文件,假设您执行读取:

buf = buffer_load("my_file.dat");

or a write:

buffer_save(buf, "my_file.dat");

这将根据您是在阅读还是在写作来完成以下两件事之一:

使用这两个简单的规则,我们现在可以看到以下函数是如何工作的(这些示例可帮助您可视化不同可用函数的过程):

在沙箱外

WindowsmacOSUbuntu(Linux)平台上,有两种方法可以从沙箱外部保存和加载文件,即使用函数get_open_filenameget_save_filename(这两种功能都需要用户选择用于加载和保存的区域,然后返回的字符串可以在其余的文件函数中使用,以绕过沙箱-更多细节请参见函数描述)另一种方法是从目标平台的游戏选项中完全禁用沙箱(仅适用于桌面目标,如本页后面所述)。

HTML5 上,也可以从服务器从沙箱外部加载文件,但是这应该只能使用函数 buffer_load_async 来完成,因为同步加载在大多数浏览器上已经被弃用,并且最终将被淘汰。这意味着以这种方式加载的文件应该保存为二进制文件-例如,你可以保存一个 *.ini 作为一个字符串 (详见 ini_close),然后将其写入一个缓冲区,然后可以使用 sprite_add 函数保存和加载。注意,如果你使用 sprite_add 加载图像,那么这些已经被异步处理了。

保存区域位置

每个目标平台都有自己的保存区域,可以在其中写入和读取文件和目录。下面是每个目标在沙箱化时的这些区域的列表:

值得注意的是,HTML5目标模块对本地存储有限制(根据浏览器的不同,可能在1MB到5MB之间),这意味着您将不被允许保存大型精灵,屏幕截图等。