好的,这就是交易:我正在做一个问答游戏,我决定为其配乐。这是一个音频文件,我已将其上传到我的自定义域,并通过代码流式传输。我还添加了播放/暂停按钮,以便播放器可以播放和暂停音乐。音乐会在第1帧自动播放,这是我游戏的“开始”按钮所在的位置。但是,如果玩家回答错误的问题,他将返回第一帧。问题是音乐的另一个“实例”开始播放,导致同时播放2首音乐。如果他再次回答错误,将播放三首音乐,依此类推....我需要某种事件监听器,以防止这种情况发生...如您所见,我已经尝试过使用boolean方法,但是它没有不行...
这是我用于流式传输的代码:
var mySound:Sound = new Sound();
var myChannel:SoundChannel = new SoundChannel();
var lastPosition:Number = 0;// pause button
mySound.load(new URLRequest("http://trollfacequiz.16mb.com/MusicFiles/Goat%20Songs.mp3"));
var soundIsPlaying:Boolean = false;
//mySound.play();
myChannel = mySound.play();
btn_mute.pause_btn.addEventListener(MouseEvent.CLICK, onClickPause);
function onClickPause(e:MouseEvent):void
{
lastPosition = myChannel.position;
myChannel.stop();
soundIsPlaying = false;
}
btn_mute.play_btn.addEventListener(MouseEvent.CLICK, onClickPlay);
function onClickPlay(e:MouseEvent):void
{
if (soundIsPlaying == false)
{
myChannel = mySound.play(lastPosition);
soundIsPlaying = true;
}
}
btn_mute是一个影片剪辑元件,其中包含播放和暂停按钮。
btn_pause是暂停按钮。
btn_play显然是播放按钮。
暂停按钮位于播放按钮的顶部,因此当它变得不可见时,它会“变成”播放按钮...
最佳答案
我认为主要问题在于您的代码结构和将代码放入框架中,而解决该问题的最短方法是使用SoundMixer.stopAll();。
var mySound:Sound = new Sound();
var myChannel:SoundChannel = new SoundChannel();
var lastPosition:Number = 0;// pause button
mySound.load(new URLRequest("http://trollfacequiz.16mb.com/MusicFiles/Goat%20Songs.mp3"));
var soundIsPlaying:Boolean = false;
//mySound.play();
SoundMixer.stopAll();
myChannel = mySound.play();
btn_mute.pause_btn.addEventListener(MouseEvent.CLICK, onClickPause);
function onClickPause(e:MouseEvent):void
{
lastPosition = myChannel.position;
myChannel.stop();
soundIsPlaying = false;
}
btn_mute.play_btn.addEventListener(MouseEvent.CLICK, onClickPlay);
function onClickPlay(e:MouseEvent):void
{
if (soundIsPlaying == false)
{
myChannel = mySound.play(lastPosition);
soundIsPlaying = true;
}
}
关于flash - Flash流音频问题:仅在更改帧时音频播放多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26556827/