我有一些不同的问题,我决定将它们合二为一。所以第一个问题:如果我有一个相同的代码(例如):
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);
}
长话短说也许我没有提出这么多问题,也许我的想法不正确,但我认为我的问题很容易,但我无法解决它们。欢迎任何决定和回复:)谢谢。
答案 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"]);
}