0

私は自分のゲームでこのサウンドを再生しようとしています...しかし、何らかの理由でそれが機能しています。誰かが理由を説明してもらえますか?

   var morning:Sound =new alarmclock ();
                       var transforming:SoundTransform = new SoundTransform(0.5);
                       var morningChannel:SoundChannel = morning.play(0,0,transforming);
                       morningChannel.addEventListener(Event.SOUND_COMPLETE, replay);
                       function replay (event:Event) {
                    morningChannel = morning.play(0,0,transforming);    
                    trace ("ANYBODY IN THERE????");
                    }
4

4 に答える 4

1

これを試して :

flash.media.Sound をインポートします。

flash.media.SoundChannel をインポートします。

インポート flash.events.Event;

var demoSound:サウンド;

var demoSoundChannel:SoundChannel;

音を出す();

関数 playSound():void {

demoSound = new soundObj();// soundObj is your sound.
demoSoundChannel = new SoundChannel();
demoSoundChannel = demoSound.play();
demoSoundChannel.addEventListener(Event.SOUND_COMPLETE, onComplete);

}

関数 onComplete(e:Event):void {

playSound();

}

ループ再生の簡単な例であり、機能しています。play メソッドにパラメーターを追加できますが、ループには影響しません。

于 2013-02-05T08:25:27.917 に答える
1

これを行う:

function replay (event:Event) {
  morningChannel = morning.play(0,0,transforming);    
  trace ("ANYBODY IN THERE????");
  morningChannel.addEventListener( Event.SOUND_COMPLETE, replay );
}

[イベント リスナーをサウンド チャネルに再度追加したことに注意してください。これは、「morningChannel = morning.play(0,0,transforming);」という行があるためです。サウンド チャネルのすべてのイベント リスナーが失われます。]

http://gamedev.michaeljameswilliams.com/2009/03/03/avoider-game-tutorial-9/から説明をお借りしました

于 2013-02-05T07:12:55.080 に答える
0

試す:

function replay (event:Event)
{
    morningChannel = morning.play(pausing,1,transforming);               
}
于 2013-02-05T02:44:49.830 に答える
0

オブジェクトEvent.COMPLETEによってディスパッチされるのをリッスンしてみてください。Sound過去にそれを使用してサウンドを再生することに成功しました。

SoundChannelディスパッチが独自のEvent.SOUND_COMPLETEイベントであることを知りませんでした。あなたのコード (および @Lee Burrows の同様のコード) の両方が機能するようです。

いずれにせよ、オブジェクトをリッスンするEvent.COMPLETEことSoundは試してみる価値があるかもしれません:

var morningChannel:SoundChannel = morning.play(pausing,1,transforming);
morning.addEventListener(Event.COMPLETE, replay);

function replay (event:Event)
{
    morningChannel = morning.play(pausing,1,transforming);               
}

これでもうまくいかない場合は、何かがガベージ コレクションされている可能性があります。

また、メソッドに渡して1いるplay()ため、一度ループします。それは機能していますか?おそらく、それはどういうわけか混乱を招くものです。とにかくサウンドを再生しているので、それを 0 に設定してみてください。

最後に、それでも機能しない場合は、replay()メソッドにブレークポイントを設定 (またはステートメントを追加trace()) して、イベントがディスパッチされているかどうかを判断できるようにする必要があります。

于 2013-02-05T03:22:19.617 に答える