0

このトピックについてすでにたくさんの質問が寄せられていることは知っていますが、どれも私の問題を解決していません。おそらく何かが足りないだけです.

とにかく、ここに契約があります。オーディオやサウンドエフェクトなどを再生する幸せな小さなhtml5ゲームがあり、html5をサポートするすべてのブラウザーでうまく機能します。ただし、フラッシュ フォールバックを必要としないもの。大したことないよね?どうやらそうではないようです... JS から mp3 の URL を受け取り、mp3 を取得して再生する小さな swf を作成しました。オーディオ ファイルがたくさんあるので、この方法を使用する必要があり、各ファイルに対して swf ファイルを作成することを避けたいと考えています。

これが AS です。ExternalInterface を使用して、js から変数を受け取ります。

 import flash.external.*;

 ExternalInterface.addCallback("callFlash", playSound); 

 function playSound(file:String):void {
    var s:Sound = new Sound();
    s.load(new URLRequest(file));

    s.play();
 }

そして、私のJSは変数を渡します:

 var flash = $('#fbplayer')[0];
 console.log(flash); //returns flash object so jquery is not the issue
 flash.callFlash(fallSource);

したがって、理論的にはすべて正常に動作するはずです (ExternalInterface を正しく理解していれば)。ただし、次のエラーがスローされます。

 TypeError: flash.callFlash is not a function
 flash.callFlash(fallSource);

問題がどこにあったのかわかりません。私はどんな答えでも、あるいはこれを行うためのまったく異なる方法さえも受け入れます。これがプロジェクトの配信を妨げている限り、それが機能する限り:C

ありがとう!

4

1 に答える 1

1

私はこれが本当に古いことを知っていますが、jquery で適切にフラッシュ オブジェクトを見つけることに成功したことはありません。getElementById を使用することをお勧めします。また、ほんの数か月前に最新のブラウザーで遭遇したもう 1 つのクレイジーな点は、ExternalInterface を介してコールバックを初期化した後、実際にフラッシュにフレームを待機するように指示する必要があったことです。

于 2015-03-29T22:42:02.783 に答える