エミュレータエラーが発生する
P粉447495069
P粉447495069 2023-09-01 20:53:31
0
1
818
<p>オンラインで見つけた GBA エミュレータ (https://gba.44670.org/) をリバース エンジニアリングし、HTML エクストラクターを使用して複製しようとしています。オフラインでも動作させたかったので、すべてのスクリプトをコンピューターにダウンロードし、そこで実行しました。ただし、これ以降、[ファイルを選択] ボタンは表示されなくなり、代わりに [読み込み中です。しばらくお待ちください...] というテキスト行が表示されます。コードを詳しく調べてみると、WASM と関係があることがわかりました。コードは次のとおりです。 </p> <pre class="brush:php;toolbar:false;"><div id="wasm-loading"> 読み込み中。。。待って下さい... </div> <div id="select-rom" 非表示> <input type="file" id="romFile" onchange="onFileSelected()" hidden /></p> <button onclick="$id('romFile').click()" id="btn-choose">ファイルを選択...</button> </div></pre> <p>コード内の WASM へのその他の参照は、.js ファイル app.js にあります。 </p> <pre class="brush:php;toolbar:false;">function wasmReady() { romBuffer = Module._emuGetSymbol(1) var ptr = Module._emuGetSymbol(2) wasmSaveBuf = Module.HEAPU8.subarray(ptr, ptr wasmSaveBufLen) ptr = Module._emuGetSymbol(3) imgFrameBuffer = new Uint8ClampedArray(Module.HEAPU8.buffer).subarray(ptr, ptr 240 * 160 * 4) idata = 新しい ImageData(imgFrameBuffer, 240, 160) isWasmReady = true document.getElementById('wasm-loading').hidden = true document.getElementById('select-rom').hidden = false }</pre> <p>スクリプトをダウンロードしたら、通常どおり動作するだろうと期待していました。つまり、必要なスクリプトにまだアクセスできるということですよね? <code>document.getElementById('select-rom').hidden = false</code> の true/false ステートメントを変更したり、その逆を行ったりしてテキストを非表示にしようとしましたが、何も機能しないようです。何か案は?前もって感謝します。 </p> <p>(ところで、vscode.dev でファイル パスを探しています。次のようになります: <code><script src="/Scripts/44gba.js"></script> < ;script src="/Scripts /app.js"></script> <script src="/Scripts/localforage.js"></script> <script src=/Scripts/pako.min .js> )</p>
P粉447495069
P粉447495069

全員に返信(1)
P粉550823577

スクリプトを使用してアプリケーションをローカルに維持するには、次の 2 つの点に注意してください:

  1. スクリプトが作成され、現在のアプリ ディレクトリ構造でリソース (js、css、画像) を検索します
  2. CORS プリフライト チェックを無効にしない限り、リクエストとファイルの読み取りは、ほとんどのブラウザーで CORS によってブロックされます。

つまり、応答で取得したものと同じ HTML (https://gba.44670.org/ ) をコピーします。これにより、ファイル構造が保持されます。これが私が得たものです(index.html):

リーリー

これで、ファイルを作成するスクリプト パスが表示されます:

リーリー

さらに、WASM ファイル (圧縮時 651KB、非圧縮時 7.7MB) をダウンロードする必要があります。 tarball はここからダウンロードできます (開発ツールの [ネットワーク] タブにあります): https://gba.44670.org/build/44gba.wasm

最後に、必要なファイルをすべてダウンロードします (必要に応じてアイコンや画像もダウンロードできますが、これらは必須ではありません):

次のような構造が得られます:

それでは、ブラウザから CORS を無効にしていただければ幸いです。ただし、そうでない場合は、ローカル HTTP サーバーからサービスを提供する必要があります。 1 つのオプションは、NPM パッケージをインストールすることです: https://www.npmjs.com/package/http-servernpm install --global http-server を実行します。その後、ターミナルでプロジェクト ディレクトリに移動し、サーバーを起動するだけです:

リーリー

正しい画面が表示され、ROM がロードされたら完了です。

編集: 簡単なハックによるローカル CORS 問題の解決

あなたが現在 ChromeOS を使用していることはわかっていますが、それを処理するために Node、NPM、HTTP サーバーを使用する方法が技術的にはわからないため、いくつかの変更を加え、WASM バイナリ コンテンツを直接配置します。 build/ と入力します。 44gba.js を実行し、関数 readBinary でバイナリ コンテンツを返し、CORS 問題を回避します。 Index.html を直接起動できます。ここに新しい build/44gba.js ファイルへのリンクがあります。その内容を次のファイルに置き換えるだけです: https://sendeyo.com/en/b02f94b524 皆さんです良い 。変更点は次のとおりです:

リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート