ホームページ  >  に質問  >  本文

エミュレータエラーが発生する

<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粉447495069P粉447495069414日前787

全員に返信(1)返信します

  • P粉550823577

    P粉5508235772023-09-02 11:05:59

    スクリプトを使用してアプリケーションをローカルに維持するには、次の 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 バイナリ コンテンツを直接配置します。 < code>build/ と入力します。 44gba.js を実行し、関数 readBinary でバイナリ コンテンツを返し、CORS 問題を回避します。 Index.html を直接起動できます。ここに新しい build/44gba.js ファイルへのリンクがあります。その内容を次のファイルに置き換えるだけです: https://sendeyo.com/en/b02f94b524 皆さんです良い 。変更点は次のとおりです:

    リーリー

    返事
    0
  • キャンセル返事