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

做这个:

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);”这一行 导致 Sound Channel 上的所有事件侦听器丢失。]

我从http://gamedev.michaeljameswilliams.com/2009/03/03/avoider-game-tutorial-9/借来了解释

于 2013-02-05T07:12:55.080 回答
1

试试这个 :

导入 flash.media.Sound;

导入 flash.media.SoundChannel;

导入 flash.events.Event;

var demoSound:声音;

var demoSoundChannel:SoundChannel;

播放声音();

功能播放声音():无效{

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 回答
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 回答