0

私は現在、Pixi.js とそのビルトイン ローダーを使用しています。コードを覗いてみると、サウンドもロードできることがわかりました。SoundJS内にも組み込まれているSound用の別のローダーを使用しています。

問題は、これを達成するために 2 つの異なるローダーを管理しなければならないことです。1 つはサウンド用、もう 1 つはテクスチャ用です。

次のように、Pixi.js にサウンド ファイルをロードしてもらいます。

  new PIXI.loaders.Loader()
    .add("_assets/textures/p1_walk/Von.json")
    .add("_assets/textures/p2_walk/Don.json")
    .add("_assets/textures/p3_walk/Bon.json")
    .add("_assets/textures/tiles.json")
    .add("_assets/textures/textures.json")
    //.add('bgm1'       , '_assets/bgm/bgm.mp3')
    .add('jump'       , '_assets/sfx/jump.wav')
    .add('pickupcoin' , '_assets/sfx/pickupcoin.wav')
    .add('hit'        , '_assets/sfx/hit.wav')
    .add('hit1'       , '_assets/sfx/hit1.wav')
    .add('died'       , '_assets/sfx/died.wav')
    .on("progress" , function(loader , resource)
      {
        console.log("Finished loading : " + resource.name + " progress : " + loader.progress);

      })
    .once("complete" , function()
      {
        console.log("Finished loading assets");

        //soundManifest = soundManifest.concat(
        //  [
        //     {id : "bgm1"       , src : "_assets/bgm/bgm.mp3"        }
        //   , {id : "jump"       , src : "_assets/sfx/jump.wav"       }
        //   , {id : "pickupcoin" , src : "_assets/sfx/pickupcoin.wav" }
        //   , {id : "hit"        , src : "_assets/sfx/hit.wav"        }
        //   , {id : "hit1"       , src : "_assets/sfx/hit1.wav"       }
        //   , {id : "died"       , src : "_assets/sfx/died.wav"       }
        //  ]);

        //createjs.Sound.alternateExtensions = ['mp3' , 'ogg' , 'wav' ];
        //createjs.Sound.addEventListener('fileload' , handleLoad);
        //createjs.Sound.registerSounds(soundManifest);

        SoundJS.play("jump");

        loadingScene = new LoadingScene(renderer , screenSize);
      })
    .load();

残念ながら、これはうまくいきません。ジャンプ音が鳴りません。まったく別の/無関係なローダーによって、SoundJS が既に読み込まれているサウンドを読み込み/再生する方法がわかりません。

2 つの別々のローダーを管理するにはどうすればよいですか? 以前のものの問題は、最初のローダーが 0 ~ 100% の進行状況を表示できたことです。これは、進行状況バーで使用できるようにするために必要です。しかし、これはテクスチャ専用です。パーセンテージにサウンドを含めたかったので、おそらくローダーのみを使用して、SoundJS にそこからファイルをロードさせることができると判断しました。

これはまったく可能ですか?

ありがとう!

4

1 に答える 1

1

SoundJS は、SoundJS によって登録およびロードされたサウンドのみを再生できます。プライベート API を使用してサウンドとそのロードされたデータを登録することは可能かもしれませんが、多少の作業が必要であり、公式のアプローチはありません。

あなたがしなければならない重要なこと:

  1. サウンドを登録します。AbstractPlugin はほとんどの作業を行いますが、プロセスを終了するには「完了」イベントが必要です
  2. 完全を強制することもできます (AbstractPlugin._handlePreloadCompleteロードされた ArrayBuffer を_audioSourcesハッシュに格納するメソッドを確認してください。

サウンドごとにそれを行う必要があります。サウンドが登録され、各 ID に必要なデータがあれば、SoundJS API が機能するはずです。

これは興味深いアプローチであり、SoundJS への機能要求として追加することは理にかなっているかもしれません。

于 2015-11-10T19:30:39.473 に答える