防止双击流

时间:2016-11-04 17:18:08

标签: actionscript-3 streaming

我创建了一个闪存流播放器,带有2个按钮,一个播放和一个停止 一切正常,除非第二次按下播放按钮而没有按下停止它将使流加倍。香港专业教育学院尝试添加代码停止双击,但在点击停止后,除非我刷新播放器,否则流将不会再次播放。我是编码的新手,所以请相应地做出答案,谢谢

import flash.media.SoundChannel;
import flash.media.SoundTransform;
import fl.events.SliderEvent;
import flash.events.MouseEvent;
import flash.media.Sound;
import flash.net.URLRequest;
import fl.events.SliderEvent;
import flash.events.MouseEvent;
import flash.utils.Timer;
import flash.events.Event;
import flash.events.TimerEvent;

// Objects and Vars
var myTimer:Timer = new Timer(10);
var myMusic:Sound = new Sound();
var SoundFile:URLRequest = new URLRequest("http://209.105.250.69:8548/;");
var channel:SoundChannel = new SoundChannel();
var sTransform:SoundTransform = new SoundTransform();
myMusic.load(SoundFile);

// Listeners;
btnPlay.addEventListener(MouseEvent.CLICK, playMusic);
btnStop.addEventListener(MouseEvent.CLICK, stopMusic);
sldVolume.addEventListener(SliderEvent.CHANGE,changevolume);
//sldPan.addEventListener(SliderEvent.CHANGE,changepan);
myTimer.addEventListener(TimerEvent.TIMER, updateTime); 
myMusic.addEventListener(Event.COMPLETE,getSongLength);

function convetTime(millis:Number):String
{
var Seconds:Number = ((millis % (1000*60*60)) % (1000*60)) /1000;
var Minutes:Number = (millis % (1000*60*60)) / (1000*60);
return (Math.floor(Minutes) + ":" + Math.floor(Seconds));
}


function getSongLength(evt:Event):void
{
lblSongTotalTime.text = (myMusic.length/1000).toString();
}

//function changepan(evt:SliderEvent):void
//{
//sTransform.pan = sldPan.value;
//channel.soundTransform = sTransform;
//}

function updateTime(evt:TimerEvent):void
{
//  lblSongTime.text = convertTime(channel.position);
barGreen.height = (channel.rightPeak *40);
barRed.height = (channel.leftPeak *40);

}

function changevolume(evt:SliderEvent):void
{
sTransform.volume = sldVolume.value;
channel.soundTransform = sTransform;
}
function stopMusic(evt:MouseEvent):void
{
channel.stop();
}

function playMusic(evt:MouseEvent):void
{

channel = myMusic.play();
myTimer.start();
}

我已经评论了我稍后可能会使用的一些功能 谢谢你的帮助。我也不知道是否可以进行自动播放  加载时

[My Code][1]

1 个答案:

答案 0 :(得分:0)

方法1:布尔值

只有一个布尔值,其中包含_playing == true的值。按下播放时此值应设置为true,如果已经为真则阻止播放再次执行。然后按停止按钮应将此值设置为false,允许再次按下播放按钮。

// Objects and Vars
var myTimer:Timer = new Timer(10);
var myMusic:Sound = new Sound();
var SoundFile:URLRequest = new URLRequest("http://209.105.250.69:8548/;");
var channel:SoundChannel = new SoundChannel();
var sTransform:SoundTransform = new SoundTransform();
var _playing:Boolean = false; // value for toggling when the play and stop buttons get pressed
myMusic.load(SoundFile);


//////// THIS IS THE AUTO PLAY
//
playMusic(); // will call the function that normally gets called with a mouse event

function stopMusic(evt:MouseEvent = null):void
{
    if (_playing == true){
        _playing = false;
        channel.stop();
    }
}

function playMusic(evt:MouseEvent = null):void
{
    if (_playing == false) {
        playing = true;
        channel = myMusic.play();
        myTimer.start();
    }
}

您现在也可以在其他功能中停止播放音乐。让我们说你想要一个用户可以点击的菜单,你希望音乐在他点击它时停止,如果你想让音乐在鼠标离开舞台时停止,或者在任何其他情况下你可以停止只需致电stopMusic();,首先检查是_playing == true然后将其设置为false并停止音乐,但如果_playing == false它不会尝试停止音乐或更改_playing

的值

方法2:添加/删除事件监听器

完全不同的方法是根据需要添加和删除eventListeners。例如,按下播放按钮时,请删除该按钮的eventListener,并为停止按钮添加事件侦听器。按下停止按钮时,删除停止按钮的事件监听器,并为播放按钮添加事件监听器。它可能看起来像

function playMusic(me:MouseEvent):void{
    me.target.removeEventListener(MouseEvent.CLICK, playMusic);
    btnStop.addEventListener(MouseEvent.CLICK, stopMusic);
    // rest of play music code
}

function stopMusic(me:MouseEvent):void{
    me.target.removeEventListener(MouseEvent.CLICK, stopMusic);
    playBtn.addEventListener(MouseEvent.CLICK, playMusic);
    // rest of stop music code
}

由于此方法引用了触发它的事件,因此您无法像我的第一个建议那样在没有点击事件的情况下调用这些方法。如果您更喜欢这种极好的添加和删除事件处理程序,我将向您展示如何使用此方法将触发事件解耦,就像我们使用上述第一种方法一样。请告诉我。我不想在这里添加太多您不感兴趣的细节。