Lua Love2D - Как я могу заставить его скачать файл? - PullRequest
4 голосов
/ 29 марта 2011

Название.Разрешается сохранять только в определенную директорию, но есть ли способ заставить исполняемый файл, созданный с его помощью, обновлять себя?У меня есть код, чтобы проверить, устарел ли он (HttpGet), но я не уверен, как установить новое обновление.

Основная причина - люди жалуются на необходимость повторной загрузки моей RPG.Будет ли проще упаковать его в автообновление C #, которое они могут запустить?

Ответы [ 2 ]

9 голосов
/ 30 марта 2011

Вы не можете заставить .love файл "обновляться сам". Это невозможно, если вы не используете менеджер пакетов операционной системы или что-то подобное (apt-get в Ubuntu, магазин приложений на Mac и все, что Microsoft использует, если оно есть).

Если вы не хотите этого делать, то второй лучший способ сделать эту работу - сделать исполняемый файл love2d «оболочкой»; «пустая игра», которая просто загружает материал из Интернета, а затем выполняет некоторую функцию, которая инициализирует все, включая правильную игру.

Как говорит jpjacobs, вы можете загружать материалы из Интернета, используя LuaSocket (который уже включен в LÖVE 0.7). Например, вот как вы загружаете png (я скопировал код с здесь ):

if not love.filesystem.exists("expo.png") then
  local http = require("socket.http")
  local b, c, h = http.request("http://love2d.org/w/images/e/e3/Resource-AnalExplosion.png")
  love.filesystem.write("expo.png", b)
end

Существует также способ распаковки данных с использованием алгоритма разархивирования GNU с использованием чистого lua. Он реализован в файле /AdvTiledLoader/external/gunzip.lua в Advanced TileLoader Kadoba .

Итак, я думаю, вы можете сделать игру, которая:

  1. Начинается с чтения файла с именем version.lua и сравнения его с файлом на вашем сервере (http://www.your -server.com / latest-version-number ). Этот файл просто содержит число, например «48».
  2. Если не удалось связаться ни с одним файлом и сервером, возникает ошибка «не удалось загрузить игру».
  3. Если нет файла или текущая версия <последняя версия с сервера, загрузите zip-файл с сервера (<a href="http://www.your-server.com/latest.zip" rel="noreferrer">http://www.your -server.com / latest.zip )
  4. Если файл latest.zip был успешно загружен, сотрите все содержимое в каталоге / latest и распакуйте файл latest.zip в новый файл. Обновите version.lua новой версией (возврат 48)
  5. Обнаружение, когда вы работаете в автономном режиме - если не удалось загрузить последний.zip или версию, но уже есть version.lua и последняя папка, выдайте только предупреждение, а не ошибку.
  6. Требуется файл, содержащий настоящую игру; наверное что то типа require 'latest.main'

Примечания:

  • Я не знаком с Луасокетом. Возможно, есть способ получить дату «последнего обновления» из http://www.your -server.com / latest.zip , так что вы можете просто избавиться от материала с номером последней версии.
  • Я не использовал gunzip.lua сам. Я не знаю, как он обрабатывает несколько файлов или каталогов.
1 голос
/ 30 марта 2011

Моим первым предположением будет использование LuaSocket . У вас может быть небольшой файл, содержащий номер текущей версии, который загружается при запуске, а затем решить, нужно ли обновление или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...