如何在动作中重放声音3

时间:2013-02-05 02:27:12

标签: actionscript-3 audio

我正试图在我的游戏中重播这个声音......但由于某种原因它可以工作,有人可以解释一下为什么吗?

   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 个答案:

答案 0 :(得分: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,转换);”   导致声道上的所有事件侦听器丢失。]

我从http://gamedev.michaeljameswilliams.com/2009/03/03/avoider-game-tutorial-9/

借用了解释

答案 1 :(得分:1)

试试这个:

import flash.media.Sound;

import flash.media.SoundChannel;

import flash.events.Event;

var demoSound:声音;

var demoSoundChannel:SoundChannel;

playSound();

function playSound():void {

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

}

function onComplete(e:Event):void {

playSound();

}

只是循环播放的一个简单示例,它正在运行。 你可以在play方法中添加你的参数,它不会影响循环。

答案 2 :(得分:0)

尝试:

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

答案 3 :(得分: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()语句),这样你就可以确定是否要调度该事件。 / p>