Как загрузить файл сохранения за пределами .love? (love2d + LUA)

Я пишу редактор и игру, и для этого требуется опция сохранения игры. Я просто хочу использовать папку «Сохранить» в папке с игрой. не внутри. любовь

Как получить баг.

  1. Начать игру
  2. Войдите в меню, нажав клавишу выхода
  3. Нажмите "Сохранить игру" - это создаст сохраненную игру.
  4. Нажимаем «Загрузить игру» - вы получаете сообщение об ошибке «Файл не существует», но вы записываете этот файл несколько секунд назад.

Мне удалось сохранить игру в папке savesm2k, но она находится вне файла .love, и я не знаю, как правильно загрузить сохраненную игру.

Используемый движок: Love2d 0.10.2 ОС: Linux Mint 18.1 x64bit

Я прочитал много руководств и застрял.

Для загрузки сохранения я использую эти команды

lsg=love.filesystem.getSaveDirectory().."/M2k-Saves/m2ksave" 
lsg=love.filesystem.getSourceBaseDirectory().."/M2k-Saves/m2ksave"; 
data, size = love.filesystem.read (lsg);
leveldatacopy=freadbin (data);

Почему программа не пытается прочитать существующий файл? а отчета не существует? Я пытаюсь использовать другую команду, но использование GetSaveDirectory нарушило функцию WriteMAP (требуется для двоичной карты и записи данных) и т. Д., Но он записывает файлы, которые не могут быть загружены в раздел загрузки.

Возможно, мне стоит использовать LUA для чтения файлов прямо из папки, но я не знаю, как это исправить.

пример с ошибкой. https://github.com/dj--alex/m2ktest файл m2ktest-load- savegame-test.love

В этот момент при каждом сохранении вручную заменяю сохраненную игру в архиве любви (!). Это ненормально.

Кто-нибудь может сказать мне, как я могу получить и исправить открытый сохраненный файл? Не изнутри файла .love. извне конечно. Если уровни и конфиги можно читать из файла любви, внутри файлы сохранения должны быть снаружи. Я могу создавать файлы только вне love file. Я знаю, что файл любви - это zip-архив.

При необходимости я могу опубликовать файл .love, но игра полностью готова и у меня 150 КБ чистого кода.


person Алексей Фуфаев    schedule 20.06.2017    source источник


Ответы (1)


Не следует добавлять к путям префиксы love.filesystem.getSaveDirectory() или love.filesystem.getSourceBaseDirectory(). Это делается автоматически, внутренне для love.filesystem функций. Говоря

lsg = "/M2k-Saves/m2ksave" 
data, size = love.filesystem.read (lsg)
leveldatacopy = freadbin (data)

должен работать и поместит файл в каталог сохранения / вне файла .love или каталога игры. (Лав запрещает писать где угодно, кроме каталога сохранения.)


Модель файловой системы Лава похожа на «стек» файловых систем. Для чтения файла он сначала просматривает love.filesystem.getSaveDirectory() с любым путем, который вы указали. Если он находит файл, он использует его; в противном случае он просматривает love.filesystem.getSourceBaseDirectory() (или - если он упакован - внутри файла .zip / .love). Файлы всегда записываются в love.filesystem.getSaveDirectory(), вы не можете писать в love.filesystem.getSourceBaseDirectory() (потому что это может быть не реальный каталог, а zip-файл).

person nobody    schedule 20.06.2017
comment
К сожалению, работы нет. Проблема все еще здесь. Я уже пробовал это ::: lsg = / M2k-Saves / m2ksave data, size = love.filesystem.read (lsg); ошибка (данные: .. данные); - добавлена ​​контрольная строка - всегда data = nil (!). leveldatacopy = freadbin (данные); - ожидался неверный аргумент №1 для gfind строки, получено ноль .. - person Алексей Фуфаев; 21.06.2017
comment
@ АлексейФуфаев Вы создали родительский каталог, например love.filesystem.createDirectory( "M2k-Saves" )? Если вы этого не сделаете, это может быть причиной. - person nobody; 22.06.2017
comment
Конечно, он создан месяц назад. s46.radikal.ru/i111/1706/be/413f6fe8ee82t.jpg - person Алексей Фуфаев; 24.06.2017
comment
@ АлексейФуфаев В каталоге сохранения, а не в исходном каталоге. (Что - если его нет - вам, вероятно, придется сделать с помощью кода, так что то же самое происходит и с другими.) - person nobody; 24.06.2017