如何在案件的MouseEvent的触发功能只有一次

我想使闪光灯使用一个简单的MP3播放器。 该歌曲是使用包含歌曲列表的XML文件加载。 我有“播放”按钮实例名称“PlayBtn”。 我有一个名为“playctrl”,其中列出了以下内容的ActionScript文件:

package classes { import flash.media.Sound; import flash.media.SoundChannel; import flash.events.*; import flash.events.MouseEvent; import flash.net.URLRequest; public class playctrl { private var MusicLoading:URLRequest; private var music:Sound; private var sc:SoundChannel; private var currentSound:Sound; private static var CurrentPos:Number; private var xml:XML; private var songlist:XMLList; private static var currentIndex:Number; public function playctrl() { music = new Sound(); currentSound= music; CurrentPos = 0; currentIndex = 0; } public function success(e:Event):void { xml = new XML(e.target.data); songlist = xml.song; MusicLoading = new URLRequest(songlist[0].file); music.load(MusicLoading); } public function playSong(e:Event):void { if(sc != null) sc.stop(); sc = currentSound.play(CurrentPos); trace("HELLO !!!"); } } }

我已经第二文件名为“play.as”,其内容在下面列出:

import classes.playctrl; var obj:playctrl = new playctrl(); var XMLLoader:URLLoader = new URLLoader(); //XML Loader XMLLoader.addEventListener(Event.COMPLETE, obj.success); XMLLoader.load(new URLRequest("playlist.xml")); PlayBtn.addEventListener(MouseEvent.CLICK, obj.playSong);

然而在点击播放按钮,我注意到功能playSong()被调用的7-8倍(检查通过印刷错误味精,里面的功能),从而导致重叠的音频输出和播放器崩溃的结果。 该功能被称为只有当MouseEvent.CLICK被触发一次。 请帮忙 ...

--------------解决方案-------------

有趣的是,声音对象不具有一个内置的“IsPlaying模块”布尔属性(怪),所以你可以只创建你自己的。

var isPlaying:Boolean

function playSong():void
{
if(!isPlaying)
sound.play();
}

function stopSong():void
{
if(isPlaying)
{
channel.stop();
isPlaying = false;
}

刚一说明:按照惯例,类名都大写骆驼,而实例名称是小写形式骆驼。 所以你playctrl.as类文件应该(或可以)是PlayCtrl.as,和你的PlayBtn实例应该(或可以)是playBtn。

编辑:

你的问题的标题有点误导,我给你的答案是一个解决方案,以表示在标题中的问题。

看你的代码,我想看看分离的关注,一方面要加载的歌曲数据,你要控制的声音。另一方面。 我将实现单独的类为每个关注。 如果您为您的播放器控制一个单独的类,你就可以在该类中调度事件没有事件冒泡都在你的应用程序,并调用你的函数几次。

//前面的回答,您可以通过实施时的声音被停止或播放,将设置一个布尔做到这一点。

在任何情况下,这里的另一种方式来过滤不必要的点击

private function playSong(event:MouseEvent ):void
{
// set up a conditional to identify your button ,
// here's an example...
if( event.currentTarget.name is "PlayBtn" )
{
//do whatever
//then...
event.stopImmediatePropagation();
}

}

这是说,在你的情况下,这听起来像一个速战速决,因为的MouseEvent有点不应该触发播放功能几次...

这将是有意义的,以了解你的代码调试,为什么一些事件后,鼠标点击出动

private var _isPlaying:Boolean;

public function playSong(e:Event):void
{
if(sc != null)
{
sc.stop();
_isPlaying = false;
}

if( !_isPlaying )
{
sc = currentSound.play(CurrentPos);
_isPlaying = true;
trace("HELLO !!!");
}
}

分类:柔性 时间:2015-03-15 人气:2
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.596 (s). 10 q(s)