2011-03-29 3 views
3

제목. 그것은 오직 특정 디렉토리에 저장하는 것이 허용되었지만, 그것으로 만든 실행 파일을 스스로 업데이트하는 방법이 있습니까? 오래된 (HttpGet)인지 확인하는 코드가 있지만 최신 업데이트를 설치하는 방법을 모르겠습니다.Lua Love2D - 어떻게 파일을 다운로드 할 수 있습니까?

주된 이유는 사람들이 반복적으로 내 RPG를 다시 다운로드해야한다는 불평을합니다. 실행할 수있는 C# 자동 업데이터로 패키지하는 것이 더 쉬울까요?

답변

8

.love 파일을 "자체 업데이트"할 수 없습니다. 작동 시스템의 패키지 관리자 나 비슷한 것을 사용하지 않는다면 불가능합니다 (우분투에서는 apt-get, Mac에서는 app store, 사용중인 경우 microsoft에서 사용).

그렇게하고 싶지 않다면, 그 일을하는 두 번째 가장 좋은 방법은 love2d 실행 파일을 "쉘"로 만드는 것입니다. 단순히 인터넷에서 물건을 다운로드하는 "빈 게임"이며, 나중에 적절한 게임을 포함하여 모든 것을 초기화하는 일부 기능을 실행합니다.

jpjacobs에 따르면 LuaSocket (이미 LÖVE 0.7에 포함되어 있음)을 사용하여 웹에서 자료를 다운로드 할 수 있습니다. 예를 들어,이 (내가 here의 코드를 복사 한) 당신은 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 

순수 루아를 사용하여 GNU의 압축 해제 알고리즘을 사용하여 데이터의 압축을 해제 할 수있는 방법도 있습니다. 파일은 /AdvTiledLoader/external/gunzip.luaKadoba's Advanced TileLoader에 있습니다.

그래서 난 당신이 게임을 할 수 있습니다 같아요 : version.lua라는 파일을 읽기, 서버 ( http://www.your-server.com/latest-version-number)에있는 파일과 비교하여

  1. 시작합니다. 그 파일에는 단순히 "48"과 같은 숫자가 들어 있습니다.
  2. 파일과 서버에 연결할 수 없으면 "게임을 다운로드 할 수 없습니다"오류가 발생합니다.
  3. 에는 파일 또는 현재 버전의 서버에서 < 최신 버전의 서버에서 다운로드 zip 파일 (http://www.your-server.com/latest.zip)
  4. latest.zip가 성공적으로 다운로드 한 경우가,은/최신 디렉토리 내의 모든 자료가 지워하지 않으며 새에 latest.zip의 압축을 해제하는 경우 최근. 새로운 버전으로 version.lua를 업데이트하십시오 (return 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

+0

코드 파일이'require'에 의해 처음로드되기 전에 업데이트되는 한, 왜 작동하지 않는지 나는 알 수 없습니다. – Xeozim

1

내 첫 번째 추측은 LuaSocket입니다. 현재 버전 번호가 포함 된 작은 파일을 가지고 시작할 때 다운로드 한 다음 업그레이드가 필요한지 여부를 결정할 수 있습니다.