gpt4 book ai didi

apache-flex - 如何在mouseEvent情况下仅触发一次函数

转载 作者:行者123 更新时间:2023-12-03 02:26:55 25 4
gpt4 key购买 nike

我正在尝试使用Flash制作一个简单的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” bool(boolean) 属性(奇怪),因此您可以自己创建一个。

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。

关于apache-flex - 如何在mouseEvent情况下仅触发一次函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4062346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com