Lua Love2D - 如何下载文件?

时间:2011-03-29 19:03:55

标签: download lua love2d

标题。它只允许保存到某个目录,但有没有办法使用它自己更新自己?我有代码来检查它是否已过期(HttpGet),但不确定如何安装更新的更新。

主要原因是人们抱怨不得不反复重新下载我的RPG。用它们可以运行的C#自动更新程序打包它会更容易吗?

2 个答案:

答案 0 :(得分:9)

您无法使.love文件“自行更新”。这是不可能的,除非你使用操作系统的包管理器或类似的东西(在Ubuntu中的apt-get,在mac上的app store,以及微软使用的任何东西,如果有的话)。

如果你不想这样做,那么实现这项工作的第二个最佳方法就是让你的love2d可执行文件成为“shell”;一个“空的游戏”,它只是从互联网上下载东西,然后它会执行一些初始化所有东西的功能,包括正确的游戏。

正如jpjacobs所说,你可以使用LuaSocket从网上下载东西(已经包含在LÖVE0.7中)。例如,这是您下载png的方式(我已经从here复制了代码):

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's Advanced TileLoader中的/AdvTiledLoader/external/gunzip.lua文件实现。

所以我想你可以制作一款游戏:

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

    • 我不熟悉luasocket。可能有一种方法可以从http://www.your-server.com/latest.zip获取“最后更新”日期,因此您可以简单地删除最新版本号的内容。
    • 我自己没有用过gunzip.lua。我不知道它如何处理多个文件或目录。

答案 1 :(得分:1)

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