Actionscript 3 批量添加按钮单击事件

Actionscript 3 批量添加按钮单击事件,actionscript-3,actionscript,Actionscript 3,Actionscript,我试图创建一个脚本,将事件监听器添加到数组中的每个对象,并在该事件监听器上,我希望它添加与要输入到标签上的键相关联的字母。但是当我运行程序时,什么都没发生?我可以添加一些伪代码,比如lblInput.text=“cats”;它运行良好,因此程序肯定在运行脚本 编辑:原来点击按钮实际上不起作用,为什么我看不出有什么问题,也没有错误 这是我的密码: package { import flash.display.MovieClip; import flash.events.Mouse

我试图创建一个脚本,将事件监听器添加到数组中的每个对象,并在该事件监听器上,我希望它添加与要输入到标签上的键相关联的字母。但是当我运行程序时,什么都没发生?我可以添加一些伪代码,比如lblInput.text=“cats”;它运行良好,因此程序肯定在运行脚本

编辑:原来点击按钮实际上不起作用,为什么我看不出有什么问题,也没有错误

这是我的密码:

package  {
    import flash.display.MovieClip;
    import flash.events.MouseEvent;

    public class Main extends MovieClip {

        public function Main() {
            this.addEventListener('enterFrame',function() {
                var buttons:Array = new Array(["Q",btnQ],
                                              ["W",btnW],
                                              ["E",btnE],
                                              ["R",btnR],
                                              ["T",btnT],
                                              ["U",btnY],
                                              ["U",btnU],
                                              ["I",btnI],
                                              ["O",btnO],
                                              ["P",btnP],
                                              ["A",btnA],
                                              ["S",btnS],
                                              ["D",btnD],
                                              ["F",btnF],
                                              ["G",btnG],
                                              ["H",btnH],
                                              ["J",btnJ],
                                              ["K",btnK],
                                              ["L",btnL],
                                              ["Z",btnZ],
                                              ["X",btnX],
                                              ["C",btnC],
                                              ["V",btnV],
                                              ["B",btnB],
                                              ["N",btnN],
                                              ["M",btnM]);  

                for(var i:int = 0; i < buttons.length; i++)
                {
                    buttons[i][1].addEventListener(MouseEvent.CLICK,function(){

                        if(lblInput.text == "Type something to begin..")
                            lblInput.text = buttons[i][0];
                        else
                            lblInput.appendText(buttons[i][0]);

                    });
                }
            });
        }

    }
}
包{
导入flash.display.MovieClip;
导入flash.events.MouseEvent;
公共类Main扩展了MovieClip{
公共功能Main(){
this.addEventListener('enterFrame',function(){
变量按钮:数组=新数组([“Q”,btnQ],
[“W”,btnW],
[“E”,btnE],
[“R”,btnR],
[“T”,btnT],
[“U”,btnY],
[“U”,btnU],
[“I”,btnI],
[“O”,btnO],
[“P”,btnP],
[“A”,btnA],
[“S”,BTN],
[“D”,btnD],
[“F”,btnF],
[“G”,btnG],
[“H”,btnH],
[“J”,btnJ],
[“K”,btnK],
[“L”,btnL],
[“Z”,btnZ],
[“X”,btnX],
[“C”,btnC],
[“V”,btnV],
[“B”,btnB],
[“N”,btnN],
[“M”,btnM]);
对于(变量i:int=0;i
如前所述,
i
变量的值不是事件处理程序中所期望的值。因此,最简单的方法是将变量设为按钮的属性,然后可以从处理程序中的事件对象检索该属性。你说你的按钮是movieclips,这样就可以了,因为它们是对象的扩展

但是,考虑到您需要一个字符范围,您可以不使用数组,只指定一个范围。特别是因为您为所有按钮提供了通用名称和所需字符

主功能中:

// 65 = capital A in Unicode
// 90 = capital Z in Unicode
var characterRange:Object = {begin:65, end:90};

var character:String;
var button:MovieClip;

for ( var i:int = 0; i < characterRange.end-characterRange.begin; ++i ) {
    // use String.fromCharCode to get "A" from 65 etc.
    character = String.fromCharCode(i + characterRange.begin);
    // get the button based on the character
    button = MovieClip(this.getChildByName("btn"+character));
    // add the character as a property of the button
    button.character = character;
    // attach an click handler
    button.addEventListener(MouseEvent.CLICK, buttonClick);
}
function buttonClick(e:MouseEvent):void {
    // get the character/letter from the currently clicked button
    var letter:String = MovieClip(e.currentTarget).character;
    if ( lblInput.text == "Type something to begin..") {
        lblInput.text = letter;
    } else {
        lblInput.appendText(letter);
    }
}

字符代码示例:

函数中的
i
不是您期望的值。您需要向按钮添加某种类型的引用,以便在scropt中调用。这种语言是否足够像javascript,我可以通过执行object.variable向对象添加变量,这样我就可以执行按钮[I][1]。字母=按钮[I][0]按钮是什么类型的元素?电影嘴唇?那样的话,你就不能像我想的那样添加一个变量。是的,我应该如何存储这个变量呢?而且我的按钮点击看起来根本没有触发事件?