Есть несколько разных способов создать и/или получить доступ к файлам. Пути файлов и способы, которыми вы получаете доступ к этим файлам различаются в зависимости от типа файла и размещения файла.
Defold предоставляет несколько разных функций для работы с файлами:
io.*
функции для чтения и записи файлов. Эти функции дают вам очень тонкий уровень контроля над всем процессом ввода-вывода.os.rename()
и os.remove()
для переименования и удаления файлов.sys.save()
и sys.load()
для чтения и записи Lua-таблиц. Существуют дополнительные функции sys.*
чтобы помочь платформенно-независимо определять пути файла.Места расположения файлов и директорий могут быть поделены на три категории:
Когда сохраняются или загружаются файлы специфичные для приложения, такие как рекорды, настройки игрока или игровое состояние, рекомендуется делать это в месте расположения, предоставляемом операционной системой и предназначенной специально для этих целей. Вы можете использовать sys.get_save_file()
, чтобы получить специфичный для конкретной ОС абсолютный путь до файла. Получив абсолютный путь, вы можете использовать функции sys.*
, io.*
и os.*
(смотри выше).
Посмотрите пример, демонстрирующий как применять sys.save() и sys.load().
Вы можете поставлять файлы с вашим приложением двумя способами:
CUSTOM RESOURCES — Как часть архива игры используя поле Custom Resources в game.project. Вы можете читать из этих файлов используя sys.load_resource()
. Заметьте, что эти файлы не являются реальными файлами в файловой системе. Файлы, включенные таким способом становятся частью бинарного архива игры и единственный способ получить к ним доступ — через вызов sys.load_resource()
.
BUNDLE RESOURES — Как дополнительные файлы и директории, располагаемые как часть бандла вашего приложения используя поле Bundle Resources в game.project. Вы можете использовать sys.get_application_path()
, чтобы получить путь до места, где хранится приложение. Используйте этот базовый путь до приложения для создания окончательных абсолютных путей до файлов, к которым вам нужно получить доступ. Имея абсолютный путь к этим файлам, вы можете использовать функции io.*
и os.*
для доступа к файлам (см. выше).
Из соображений безопасности браузеры (и, как следствие, любой JavaScript, работающий в браузере) не имеют доступа к системным файлам. Файловые операции в HTML5 билдах в Defold по-прежнему работают, однако они работают на “виртуальной файловой системе” используя IndexedDB API в браузере. Это означает, что не существует способа получить доступ к ресурсам бандла используя функции io.*
или os.*
. Однако вы можете получить доступ к ресурсам бандла используя вызов http.request()
.
Характеристики | Custom Ресурсы | Bundle Ресурсы |
---|---|---|
Скорость загрузки | Быстрее - файлы загружаются из бинарного архива | Медленнее - файлы загружаются из файловой системы |
Частичная загрузка файлов | Нет - только целиком | Да - произвольное чтение байт из файлов |
Изменение файлов после поставки | Нет - файлы хранятся внутри бинарного архива | Да - файлы хранятся на локальной файловой системе |
Поддержка HTML5 | Да | Да - но доступ через HTTP, а не файловый ввод-вывод |
Доступ к системным файлам может быть ограничен операционной системой из соображений безопасности. Вы можете использовать нативное расширение extension-directiories
для получения абсолютных путей до некоторых общих системных директорий (то есть документы, ресурсы, temp). Имея абсолютный путь к этим файлам вы можете использовать функции io.*
и os.*
для получения доступа к этим файлам (смотри выше).
Из соображений безопасности браузеры (и, как следствие, любой JavaScript, работающий в браузере) не имеют доступа к системным файлам. Файловые операции в HTML5 билдах в Defold по-прежнему работают, однако они работают на “виртуальной файловой системе” используя IndexedDB API в браузере. Это означает, что не существует способа получить доступ к системным файлам в HTML5 билдах.
Портал ассетов содержит несколько ассетов для упрощения доступа к файлам и директориям. Некоторые из примеров:
Did you spot an error or do you have a suggestion? Please let us know on GitHub!
GITHUB