AS3如果/如果有其他问题

时间:2014-03-30 23:13:10

标签: actionscript-3 if-statement

我遇到If和If Else语句的问题。

我正在尝试创建一个菜单,它将在各种预定的X坐标处生成一个动画片段。

问题在于,在测试按钮A,B,C,D时,如果单击“A”按钮,它将跟踪“load1”,这是一个“test”uint为“0”,B应该跟踪“测试”为1,C为2,D为3.

问题是我点击的每个按钮的输出都是“0”,这是第一个“if”语句。

帮助将不胜感激!

这是Import语句(有没有办法优化这段代码?因为我仍然有按钮直到“Y”)

Layout_KeyboardOne.btn_A.addEventListener(MouseEvent.CLICK,ButtonHandler);
Layout_KeyboardOne.btn_B.addEventListener(MouseEvent.CLICK,ButtonHandler);
Layout_KeyboardOne.btn_C.addEventListener(MouseEvent.CLICK,ButtonHandler);
Layout_KeyboardOne.btn_D.addEventListener(MouseEvent.CLICK,ButtonHandler);

这是ButtonHandler函数

    if (Layout_KeyboardOne.btn_A)
        {
            load1 = 0;
            trace(load1);
        }
    else if(Layout_KeyboardOne.btn_B)
        {
            load1 = 1;
            trace(load1);
        }
    else if(Layout_KeyboardOne.btn_C)
        {
            load1 = 2;
            trace(load1);
        }
    else if(Layout_KeyboardOne.btn_D)
        {
            load1 = 3;
            trace(load1);
        }

3 个答案:

答案 0 :(得分:3)

事件处理程序中的条件语句不检查触发事件的按钮。相反,他们会测试是否定义了剪辑。在您的情况下,无论单击哪个按钮,第一个语句都将评估为true,因为Layout_KeyboardOne.btn_A已定义。

区分哪个实例触发特定事件的一种方法是使用currentTarget对象的Event属性(请参阅documentation):

function ButtonHandler(event:Event):void {
    if (event.currentTarget == Layout_KeyboardOne.btn_A) {
         // btn_a was clicked
    }
}

答案 1 :(得分:0)

如果有更多情况,请尝试使用switch语句,因为它更干净,速度更快。

function ButtonHandler(e:MouseEvent):void {
    switch(e.currentTarget) {
        case Layout_KeyboardOne.btn_A:
            load1 = 0;
            trace(load1);
            break;
        case Layout_KeyboardOne.btn_B:
            load1 = 1;
            trace(load1);
            break;
        //...
    }
}

答案 2 :(得分:0)

Switch case会占用你的处理器一长串列表,为什么你不使用对象数组

function btnList():array{
      var _btnA:Object={label:"Layout_KeyboardOne.btn_A",load : 0};
      var _btnB:Object={label:"Layout_KeyboardOne.btn_B",load : 1};
       ....
       ....
      var arr:Array = new Array(btnA , btnB ,btnc.....);
      return arr;
      }

       combobox.addEventListener(Event.CHANGE,mainGoal);
       combobox.labelField = "label";

现在您可以在comboxbox中使用该列表,或者通过循环调用您想要显示的任何位置。

for each (var btns:Object in btnList()){
    dropDown.addItem(btns);
}

现在你可以发挥功能来呼唤你的愿望目标

function mainGoal():void{
    var myObject:object = dropdown.selectedItem;
     trace("object label : "+ myObject.label);
     trace("object load  : "+ myObject.load);
     }

所以这可以作为离线功能的例子,与if else和switch case相比,它将使用更少的处理器。