2014-03-30 65 views
-1

我遇到If和If Else語句的問題。AS3如果/如果其他問題

我想創建一個菜單,它將在各種預先確定的X座標處生成一個動畫片段。

問題是,當測試按鈕A,B,C,D時,如果我點擊「A」按鈕,它會跟蹤「load1」這是一個「測試」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

嘗試使用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

您的事件處理程序中的條件語句不檢查哪個按鈕觸發了該事件。相反,他們測試剪輯是否被定義。就你的情況而言,無論點擊哪個按鈕,第一條語句將評估爲true,因爲Layout_KeyboardOne.btn_A已定義。的區別

的一種方式,其實例所觸發的特定事件是使用Event對象的currentTarget財產(見documentation):

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

包含比我的答案更多的解釋,但我仍然更喜歡切換if-else,當涉及到超過2-3個案例。 :) – 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); 
    } 

因此這可能例如離線功能,它會使用更少的處理器比較,如果別人和開關的情況下。