13

私は現在、ゲームに基づいた Web スクリプトに取り組んでいます (ゲームを Web に移植するため)。スクリプトは Web ホストからデータをダウンロードするため、読み込みが遅くなります (マップ、モデル、テクスチャなどの各ファイルをダウンロードする必要があります)。これを修正するために、ユーザーがローカルから直接コンテンツを解析し、Web から複数のメガをダウンロードすることを避けるために、ユーザーが自分のコンピューターでローカル ゲーム データを選択できるようにするオプションを追加しました (ファイル API を使用 - ドラッグ アンド ドロップを使用)。結果は非常に高速です。 .

ここに問題があります。ブラウザをリロードするたびに、何度も何度もファイルを再選択する必要があります。ユーザーフレンドリーではありません。

では、ユーザーが毎回ドラッグ アンド ドロップをやり直さないように、このゲーム アーカイブからの参照を保持する方法はありますか? セキュリティ上の懸念については知っていますが、永続的な URL.createObjectURL() のようなものがあるかどうかを知りたいだけです。

注:ゲーム データは約 2Go であるため、FileSystem API に格納することはできません (コピーしたくありません。データへの参照を保持できる場合、データをコピーするのは無駄なスペースです)。

ありがとうございました :)

4

2 に答える 2

4

ユーザーからの入力が必要です

ユーザーが確認しない限り、クライアントのコンピューター上のファイルにアクセスすることはできません。changeユーザーがファイルを選択すると (イベントでリッスンできます)、たとえばFileReader APIを使用してファイルを読み取ることができます。

document.getElementById("input").addEventListener("change", function() {
    const fs = new FileReader();
    fs.readAsText(this.files[0]);
    fs.onloadend = function() {
        document.getElementById("output").innerText = fs.result;
    }
});
<input id="input" type="file" />
<div id="output"></div>

localStorageファイルの一部を保存するために使用する

を使用しlocalStorage APIてファイルの一部を保存することもできますが、容量は非常に限られています。特に、あなたのようなプロジェクトの場合はそうです (現在最も普及しているブラウザーで最大 5 から 10 MB)。

これにより、保存されているかどうかを毎回確認し、保存されていないものをロードする必要があるため、コーディングがはるかに困難になります。

キャッシング

キャッシングを使用すると、基本的に と同じ問題に陥ります。つまり、localStorage各ブラウザーには独自の最大容量があります。

この方法の利点は、ブラウザーが自動的にこれを行うため、何が読み込まれているかどうかを気にする必要がないことです。

フラッシュの使用

セキュリティをまったく気にしない場合は、Flash プラグインを使用してファイルを保存およびロードし、次に を使用ExternalInterfaceして JavaScript コードでデータをロードすることができます。

ExternalInterface.call("loaded", filename, data);

// And then in JavaScript:
// function loaded(filename, data)
// ...

SharedObjectデータの保存と読み込みに使用できます。

私は AS3 の専門家ではありません。

デスクトップ アプリケーションですか。

最後のオプションは、ゲームをデスクトップ アプリケーションに変換してバンドルすることです。たとえば、electronを介してバンドルし、たとえば、現在electron が永続ストレージ用に推奨するツールであるNeDBを使用します。

于 2016-12-13T05:06:40.073 に答える