4

标题。它只允许保存到某个目录,但是有没有办法让用它制作的可执行文件自行更新?我有代码来检查它是否过时(HttpGet),但不确定如何安装较新的更新。

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

4

2 回答 2

9

您不能使 .love 文件“自我更新”。这是不可能的,除非您使用操作系统的包管理器或类似的东西(Ubuntu 中的 apt-get、mac 上的应用商店,以及微软使用的任何工具,如果有的话)。

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

正如 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

还有一种使用纯 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.zip。用新版本更新 version.lua(返回 48)
  5. 检测您何时离线工作 - 如果无法下载 latest.zip 或 version,但已经有 version.lua 和 latest 文件夹,则只给出警告,而不是错误。
  6. 要求包含真实游戏的文件;可能是这样的require 'latest.main'

笔记:

  • 我不熟悉luasocket。有可能有一种方法可以从http://www.your-server.com/latest.zip获取“最后更新”日期,因此您可以简单地摆脱 latest-version-number 的东西。
  • 我自己没有使用过gunzip.lua。我不知道它如何处理多个文件或目录。
于 2011-03-30T08:31:53.053 回答
1

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

于 2011-03-30T08:05:02.243 回答