0

我有几个不同的问题,我决定把它们放在一起。所以第一个问题:如果我有一个相同的代码(例如):

buttonsA.buton1a.addEventListener(MouseEvent.MOUSE_DOWN , buton1a_function);
buttonsA.buton2a.addEventListener(MouseEvent.MOUSE_DOWN , buton2a_function);
buttonsA.buton3a.addEventListener(MouseEvent.MOUSE_DOWN , buton3a_function);
buttonsA.buton4a.addEventListener(MouseEvent.MOUSE_DOWN , buton4a_function);
buttonsA.buton5a.addEventListener(MouseEvent.MOUSE_DOWN , buton5a_function);
buttonsA.buton6a.addEventListener(MouseEvent.MOUSE_DOWN , buton6a_function);
buttonsA.buton7a.addEventListener(MouseEvent.MOUSE_DOWN , buton7a_function);
buttonsA.buton8a.addEventListener(MouseEvent.MOUSE_DOWN , buton8a_function);
buttonsA.buton9a.addEventListener(MouseEvent.MOUSE_DOWN , buton9a_function);
buttonsA.buton10a.addEventListener(MouseEvent.MOUSE_DOWN , buton10a_function);

我想把它放在几个地方(在不同的条件下)我可以把它们放在一个函数中调用一个函数而不是复制大量文本(我想过从不同的文件中“包含”,但我想保留所有一个文件中的信息)。

第二个问题是关于数组:在我的情况下,我有一个数组,我 .push()里面有一个不同的数字。但它可能是“1,51,11,2,13' 或“1,2,3,4 ,5" 所以每次数字(和数字本身)的位置都是不同的。我怎么能在函数中对 AS3 说,以准确删除(.splice)数字 5 或 6(尽管它们在数组中的位置)。

第三个问题又是关于问题上方的“代码”。我可以用循环for用更少的代码来制作所有这 10 个 addEventListen 吗(我认为应该是这样的:)

    for(var i:int = 1; i <= 100; i++){
   //buttonsA.buton'i'a.addEventListener(MouseEvent.MOUSE_DOWN , buton'i'a_function);
    }

长话短说,也许我不必提出这么多问题,也许我的想法不正确,但我认为我的问题很简单,但我无法解决它们。欢迎任何决定和回复:) 谢谢。

4

1 回答 1

1

第一个问题:

不确定我是否理解您的第一个问题。我会尝试一下,并说您希望在应用程序状态的不同上下文中启用按钮鼠标按下的功能,但是您不想一直重复所有事件侦听器?

如果是这样,您应该为所有按钮创建一个子类来继承。它可能看起来像这样:

public class ButtonSubClass extends Sprite {  //or simple button, or whatever
    public function ButtonSubClass():void {
        this.addEventListener(MouseEvent.MOUSE_DOWN,downHandler,false,0,true);
    }

    private function downHandler(e:MouseEvent):void {
        //do something common to all your buttons here
    }
}

然后,让你的所有按钮都继承自这个类。

第二个问题:

function removeFromArray(elementVal:*):void {
    var index:int = array.indexOf(elementVal);  //get the index of the first element whose value is the passed parameter;
    if(index >= 0){
        array.splice(index,1); //remove that element/index from the array.
    }
}

第三个问题:

如果ButtonA是一个精灵,其唯一的孩子是您想要监听器的所有按钮,那么您可以这样做:

var i:int = buttonA.numChildren;
while(i--){
    buttonsA.getChildAt(i).addEventListener(MouseEvent.MOUSE_DOWN , button_function);
}

function button_function(e:Event):void {
    switch(e.currentTarget){
        case button1a:
            //do something with button 1a
            break;

        case button2a
            //do something with button 2a
            break;
    }
}

或者,更草率,效率更低,不推荐,这个:

for(var i:int=1;i<=10;i++){
    this["buton" + i.toString() + "a"].addEventListener(MouseEvent.MOUSE_DOWN, this["buton" + i.toString() + "a_function"]); 
}
于 2012-09-17T19:13:19.103 回答