我遇到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);
}
答案 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相比,它将使用更少的处理器。