2011-03-29 69 views
3

标题。它只允许保存到某个目录,但有没有一种方法可以使用它自行更新自己的可执行文件?我有代码来检查它是否过期(HttpGet),但不知道如何安装较新的更新。Lua Love2D - 我怎样才能让它下载一个文件?

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

回答

8

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

如果你不想那么做,那么做第二个最好的方法就是让你的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 

也有一种方法来解压缩使用使用纯卢阿GNU的解压缩算法的数据。它通过Kadoba's 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.zip上新最新。使用新版本更新version.lua(返回48)
  5. 当您离线工作时检测 - 如果无法下载latest.zip或版本,但已经有version.lua和最新文件夹,只给出警告,而不是错误。
  6. 要求包含真实游戏的文件;大概就像require 'latest.main'

注:

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

实际上,你可以使它自己更新而不是一个“壳”。您不能更改.love文件,但使用'love.filesystem'(进入游戏的分配保存文件夹)保存的任何内容都应该覆盖您游戏的.love文件的内容。我不完全确定它适用于代码文件,但它至少适用于其他资源。 – nkorth 2012-05-19 19:49:27

+0

只要代码文件在被'require'加载之前被更新,我就不明白为什么它不起作用。 – Xeozim 2017-08-09 12:50:33

1

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

相关问题