【发布时间】:2011-07-25 13:21:16
【问题描述】:
标题。它只允许保存到某个目录,但是有没有办法让用它制作的可执行文件自行更新?我有代码来检查它是否过时 (HttpGet),但不知道如何安装较新的更新。
主要原因是人们抱怨必须反复重新下载我的 RPG。用他们可以运行的 C# 自动更新程序打包它会更容易吗?
【问题讨论】:
标题。它只允许保存到某个目录,但是有没有办法让用它制作的可执行文件自行更新?我有代码来检查它是否过时 (HttpGet),但不知道如何安装较新的更新。
主要原因是人们抱怨必须反复重新下载我的 RPG。用他们可以运行的 C# 自动更新程序打包它会更容易吗?
【问题讨论】:
我的第一个猜测是使用LuaSocket。您可以拥有一个包含当前版本号的小文件,在启动时下载该文件,然后决定是否需要升级。
【讨论】:
您不能让 .love 文件“自我更新”。这是不可能的,除非您使用操作系统的包管理器或类似的东西(Ubuntu 中的 apt-get、mac 上的应用商店,以及任何微软使用的工具,如果有的话)。
如果您不想这样做,那么完成这项工作的第二个最佳方法是将您的 love2d 可执行文件设置为“shell”;一个“空游戏”,只是从互联网上下载东西,然后它执行一些初始化所有内容的函数,包括正确的游戏。
正如 jpjacobs 所说,您可以使用 LuaSocket(已包含在 LÖVE 0.7 中)从 Web 下载内容。例如,这是您下载 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 文件实现。
所以我猜你可以制作一个游戏:
version.lua 的文件,并将其与服务器中的文件(http://www.your-server.com/latest-version-number) 进行比较。该文件只包含一个数字,例如“48”。require 'latest.main'
注意事项:
【讨论】:
love.filesystem 保存的任何内容(进入游戏指定的保存文件夹)都应覆盖游戏 .love 的内容。我不完全确定它适用于代码文件,但它至少适用于其他资源。
require首次加载之前更新,我不明白为什么它不起作用。