4

題名。特定のディレクトリへの保存のみが許可されていますが、それで作成された実行可能ファイル自体を更新する方法はありますか? 古くなっているかどうかを確認するコード (HttpGet) がありますが、新しい更新プログラムをインストールする方法がわかりません。

主な理由は、人々が私の RPG を繰り返し再ダウンロードしなければならないことに不満を持っていることです。彼らが実行できる C# auto-Updater でパッケージ化する方が簡単でしょうか?

4

2 に答える 2

9

.loveファイルを「更新」することはできません。オペレーティングシステムのパッケージマネージャーなどを使用しない限り、これは不可能です(Ubuntuのapt-get、Macのアプリストア、およびMicrosoftが使用しているもの(ある場合))。

それを望まない場合、その作業を行うための2番目に良い方法は、love2d実行可能ファイルを「シェル」にすることです。インターネットからコンテンツをダウンロードするだけの「空のゲーム」で、後で適切なゲームを含むすべてを初期化する関数を実行します。

jpjacobsが言うように、LuaSocket(すでにLÖVE0.7に含まれています)を使用してWebからコンテンツをダウンロードできます。たとえば、これは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を使用してGNUunzipアルゴリズムを使用してデータを解凍する方法もあります。これは、 KadobaのAdvancedTileLoader/AdvTiledLoader/external/gunzip.luaのファイルによって実装されます。

だから私はあなたが次のようなゲームを作ることができると思います:

  1. と呼ばれるファイルを読み取り、それをサーバー内のファイル( http://www.your-server.com/latest-version-numberversion.lua )と比較することから始めます。そのファイルには、「48」のような数字が含まれているだけです。
  2. ファイルとサーバーに接続できなかった場合は、「ゲームをダウンロードできませんでした」というエラーが表示されます。
  3. ファイルがない場合、または現在のバージョン<サーバーからの最新バージョンの場合は、サーバーからzipファイルをダウンロードします(http://www.your-server.com/latest.zip) 。
  4. latest.zipが正常にダウンロードされたら、/ latestディレクトリ内のすべてを消去し、新しいlatestでlatest.zipを解凍します。version.luaを新しいバージョンで更新します(48を返します)
  5. オフラインで作業していることを検出する-latest.zipまたはversionをダウンロードできなかったが、version.luaと最新のフォルダーが既に存在する場合は、エラーではなく警告のみを送信します。
  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 に答える