我正试图在我的游戏中重播这个声音......但由于某种原因它可以工作,有人可以解释一下为什么吗?
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????");
}
答案 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>