有关动作的问题

时间:2012-09-17 18:53:28

标签: arrays actionscript-3 for-loop array-push array-splice

我有一些不同的问题,我决定将它们合二为一。所以第一个问题:如果我有一个相同的代码(例如):

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);

我希望把它放在几个地方(在不同的条件下)我可以把它们放在一个函数中调用一个函数而不是复制一大段文本(我想从另一个文件'include'但我想要将所有信息保存在一个文件中。)

第二个问题是关于数组:在我的情况下,我有一个数组,我 .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);
    }

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

1 个答案:

答案 0 :(得分: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;
    }
}

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

for(var i:int=1;i<=10;i++){
    this["buton" + i.toString() + "a"].addEventListener(MouseEvent.MOUSE_DOWN, this["buton" + i.toString() + "a_function"]); 
}