动态声音条循环中的AddEventListener

拉拉丁

我不确定如何实现此功能,但这是我的问题:

我将按钮加载到循环中,并希望每次单击按钮时都能播放XML文件中的声音。我试图将声音对象添加到数组,但无法动态更改声音对象的名称,因此它会覆盖所有其他对象。

for(var i:int=0;i<mainclass.xml.Value.length();i++){
    var button:Knopf=new Knopf(mainclass.xml.Value[i].@bez);
    var sound:Sound=new Sound(new URLRequest(mainclass.xml.Value[i].fad));
    var array:Array=new Array();
    var array2:Array=new Array();
    start.addChild(button);
    array.push(sound);
    button.name="button"+i;
    array2.push(button.name);
    button.addEventListener(MouseEvent.CLICK, click);
    button.x=xwert;
    xwert+=100;
function click(event:MouseEvent):void {
        trace(array[0].play());
    }
}
拉美西斯

@Eric的意思是,如果您在'for'中声明该数组:

var array:Array=new Array();

然后数组在每个循环中将为空

我建议使用此代码,请注意,我添加了一个“准备工作”的代码块来模拟您正在运行代码的环境,基本上,我创建了一个对象主类,并在其中添加了xml属性,并在其中添加了“开始” movieclip阶段。我还必须将您的Knopf类更改为一个简单的textField,但是想法是相同的。

为了存储声音对象而不是数组,我使用了一个对象“声音”,但请看一下它在循环之前的定义,建议采用相同的方式在循环之前初始化xwert变量。

click函数也应该在循环外定义,所有按钮只需要一个侦听器,此侦听器将知道单击的是哪个按钮(event.target),然后知道其名称,我们可以使用以下命令访问“ sounds”对象这个名字。

该代码在我的计算机中正常工作,并且在同一目录中具有“ click.mp3”声音,因为这是在示例xml中定义的方式:click.mp3

//Preparing stuff
import flash.text.TextField;
import flash.display.MovieClip;
var mainclass = {
    xml: new XML("<xml><Value bez='Button A'><fad>click.mp3</fad></Value><Value bez='Button B'><fad>click.mp3</fad></Value><Value bez='Button C'><fad>click.mp3</fad></Value></xml>")
}
var start = new MovieClip();
this.addChild(start);
//End of Pre-stuff


//Code to implement
var xwert: int = 0; //Initialize xwert variable
var sounds:Object = {}

for (var i: int = 0; i < mainclass.xml.Value.length(); i++) {
    var button: TextField = new TextField();
    button.text = mainclass.xml.Value[i].@bez;
    var sound: Sound = new Sound(new URLRequest(mainclass.xml.Value[i].fad));
    start.addChild(button);
    button.name = "button" + i;
    sounds[button.name] = sound;
    button.addEventListener(MouseEvent.CLICK, click);
    button.x = xwert;
    xwert += 100;
}
function click(event: MouseEvent): void {
    trace(sounds[event.currentTarget.name]);
    sounds[event.target.name].play();
}

编辑:由currentTarget更改目标

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章