文件系统
这个扩展提供了对运行游戏的PC文件系统的访问。
注意
这仅在Windows、Linux和MacOS上有效。目前不支持移动游戏和Web游戏。
文件系统与存储扩展
GDevelop提供了两种不同的永久保存数据的方式。存储扩展和文件系统扩展。
由于GDevelop是建立在Web技术之上的,在撰写本文时,每个游戏基本上都是一个网站,可以直接在浏览器中运行(Web导出),或者在一个精简的浏览器容器“Electron”(Windows、macOS、Linux)/“Apache Cordova”(Android、iOS)中运行。
所有这些平台都提供Web存储,集成在其运行时的浏览器组件中,可以以类似于字典的键/值方式保存数据。
出于安全原因,Web浏览器不允许网站向执行它们的计算机的文件系统写入任何数据。只有导出到Windows、macOS或Linux的游戏才能使用此功能。
存储
- 它在所有可以导出游戏的平台上都可用。
- 它只能保存文本和数字,无法将二进制数据(如截图)保存到Web存储中。
- 其最大容量受限于玩家使用的Web浏览器类型,一般为几兆字节。
- 玩家无法直接访问Web存储。
文件系统
- 仅在Windows、Linux和macOS上可用。
- 您可以保存任何类型的数据。
- 您可以自由选择一个文件夹来保存您的数据。
- 文件大小没有限制。
- 玩家可以编辑文件(例如,使用文本编辑器手动更正配置文件中的错误屏幕分辨率)
异步执行
默认情况下,GDevelop中的操作以同步方式执行。这意味着游戏循环会等待每个操作完成执行,然后才运行以下事件。执行时间超过几毫秒的操作将导致整个游戏执行冻结,直到操作完成。
为避免这些冻结,GDevelop支持特定操作的异步执行。如果选择操作的“async”版本,则该操作将被委托给在游戏循环之外并行运行的后台任务。在执行异步操作后,GDevelop将立即执行事件表中的下一个事件,而不会等待操作完成。
为了获取有关后台任务状态的通知,异步操作具有一个可选的结果变量。该变量将在后台任务完成时更新为操作的结果。
通过检查其值,您可以了解操作何时精确完成以及结果是什么:
- “ok”:操作无错误执行。
- “error”:尝试执行操作时出现问题。
在线性拼图游戏中,在完成上一个关卡后保存下一个关卡的名称,无需异步执行。
另一方面,在尝试为具有程序生成的无限地形的开放世界游戏添加自动保存功能时,由于要写入的数据量庞大,游戏开发人员可能无法避免异步保存游戏。
决定使用哪种操作变体适用于个别情况,这取决于游戏开发人员。
条件
文件或目录存在
此条件检查文件系统中给定的文件或目录是否存在。== 参数 ==
文件或目录路径: 要检查的文件或目录的绝对路径。
操作
创建目录
该操作在给定文件路径创建一个新文件夹。== 参数 ==
目录: 要创建的目录的绝对文件路径。建议使用表达式来表示特殊文件夹(见下文),以保持游戏的平台独立性。
(可选)结果变量:用于存储结果的变量。它可以保存值“ok”:任务成功或“error”:发生错误。
将文本保存到文件中
此操作将给定的文本(字符串)同步保存到文件系统中。== 参数 ==
字符串(文本): 要保存到文件中的文本。 保存路径: 文件系统上文件应保存的路径。建议使用表达式来表示特殊文件夹(见下文),以保持游戏的平台独立性。
(可选)结果变量:用于存储结果的变量。它可以保存值“ok”:任务成功或“error”:发生错误。
将文本保存到文件中(异步)
此操作将给定的文本(字符串)异步保存到文件系统中。== 参数 ==
字符串(文本): 要保存到文件中的文本。 保存路径: 文件系统上文件应保存的路径。建议使用表达式来表示特殊文件夹(见下文),以保持游戏的平台独立性。
(可选)结果变量:用于存储结果的变量。它可以保存值“ok”:任务成功或“error”:发生错误。变量将在文件操作完成时更新。
将场景变量保存到JSON文件中
此操作将给定的场景变量以JSON格式同步保存到文件系统中。== 参数 ==
场景变量: 要保存到文件中的场景变量。这可以是数字、文本变量或带有子项的结构。 保存路径: 文件系统上文件应保存的路径。建议使用表达式来表示特殊文件夹(见下文),以保持游戏的平台独立性。
(可选)结果变量:用于存储结果的变量。它可以保存值“ok”:任务成功或“error”:发生错误。
将场景变量保存到JSON文件中(异步)这个动作将给定的场景变量以JSON格式异步地保存到文件系统中。 == 参数 == 场景变量: 要保存到文件中的场景变量。这可以是数字变量、文本变量或带有子项的结构。 保存路径: 文件系统中保存文件的路径。建议使用表达式来表示特殊文件夹(参见下文),以保持游戏在不同平台上的独立性。 (可选)结果变量: 用于存储结果的变量。它可以存储值'ok':任务成功完成或'error':发生错误。变量将在文件操作完成时更新。在 Pictures 目录中保存截图的示例代码如下:
FileSystem::PicturesPath() + FileSystem::PathDelimiter() + "my_screenshot.png"
这段代码适用于Windows、Linux和macOS。
参考资料
所有操作、条件和表达式都列在文件系统参考页面中。