Lua Love2D - 如何使它下载一个文件?

Title. 只允许保存到特定目录,但是否有一种方式使生成的可执行文件自更新?我有代码检查它是否过时(HttpGet),但不确定如何安装更新。

主要原因是人们抱怨不断重新下载我的 RPG。将其和 C# 自动更新程序打包在一起是否更容易让用户运行?

原文链接 https://stackoverflow.com/questions/5477582

点赞
stackoverflow用户513763
stackoverflow用户513763

我的第一个猜测是使用LuaSocket。你可以有一个小文件包含当前版本号,并在启动时下载该文件,然后决定是否需要升级。

2011-03-30 08:05:02
stackoverflow用户312586
stackoverflow用户312586

你无法使.love文件「自更新」,除非你使用操作系统的包管理器或类似的工具(在Ubuntu中使用apt-get,在Mac中使用应用商店,在Windows中使用Microsoft的什么,如果有的话)。

如果你不想这么做,那么让love2d可执行文件成为一个「shell」将是使它正常工作的第二好的方法;一个「空游戏」,它仅仅从互联网上下载一些东西,后来执行一些初始化的过程,包括正常的游戏。

正如jpjacobs所说,你可以使用LuaSocket从web上下载文件(在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

还有一种纯Lua编写的,使用GNU解压缩算法来解压缩数据的方法。在Kadoba的Advanced TileLoader中,它是由/AdvTiledLoader/external/gunzip.lua文件实现的。

所以我猜你可以制作一个游戏:

  1. 读取一个名为version.lua的文件,将其与你的服务器上的文件(http://www.your-server.com/latest-version-number)进行比较。该文件仅包含一个数字,比如“48”。
  2. 如果没有文件并且无法联系到服务器,则出现错误“无法下载游戏”。
  3. 如果没有文件,或当前版本<服务器上的最新版本,则从服务器下载zip文件(http://www.your-server.com/latest.zip)。
  4. 如果成功下载了latest.zip,请删除/ latest目录中的所有内容,并在新latest上解压缩latest.zip。使用新版本更新version.lua(返回48)。
  5. 检测你是否正在离线工作 - 如果无法下载latest.zip或version,但已经有version.lua和latest文件夹,请给出警告而不是错误。
  6. 要求包含真正游戏的文件;可能类似于require 'latest.main'

注意:

  • 我不熟悉luasocket。有可能有一种方法可以从http://www.your-server.com/latest.zip获取「最后更新」日期,因此您可以摆脱最新版本号的东西。
  • 我自己没有使用过gunzip.lua。我不知道它如何处理多个文件或目录。
2011-03-30 08:31:53