2014-03-30 2 views
-1

If 및 If Else 문에 문제가 있습니다.AS3 If/If Else 문제

다양한 미리 결정된 X 좌표에서 동영상 클립을 생성하는 메뉴를 만들려고합니다.

문제는 버튼 A, B, C, D를 테스트하는 동안 "A"버튼을 클릭하면 "테스트"단위 인 "load1"을 "0"으로 추적하고 B는 " "test"를 1로, C를 2로, D를 3으로 추적하십시오.

내가 클릭하는 모든 버튼에는 첫 번째 "if"문인 "0"의 출력이 있습니다.

도움을 받으실 수 있습니다!

이 가져 오기 문은

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

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

에 ButtonHandler 기능을 시도한다 (나는 아직도 "Y"까지 버튼이로?이 코드를 최적화 할 수있는 방법이 있나요)입니다 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; 
     //... 
    } 
} 
3

조건식은 이벤트를 트리거하는 버튼 확인되지 않습니다. 대신, 클립이 정의되어 있는지 여부를 테스트합니다. 귀하의 경우, 첫 번째 명령문은 Layout_KeyboardOne.btn_A이 정의되어 있기 때문에 클릭 한 버튼과 상관없이 true로 평가됩니다. 특정 이벤트를 트리거 예를 구별의

한 가지 방법은 Event 개체의 currentTarget 속성을 사용하는 것입니다 (documentation 참조)

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

내 답변보다 자세한 설명이 포함되어 있지만 2-3 이상의 경우에는 if-else로 전환하는 것이 좋습니다. :) – Zhafur

+1

동의. 실제 문제는 OP의 조건부가 OP가 어떤 생각을 하는지를 확인하지 못한다는 것입니다. –

0

스위치의 경우 긴 목록은 프로세서를 먹을 것이다, 왜 해달라고 객체 배열을 사용하십시오

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

당신의 욕망 호출 할 수 있습니다.