2011-03-29 111 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。您可以有一個包含當前版本號的小文件,在啓動時下載,然後決定升級是否需要。

相關問題