2013-02-07 12 views
0

很抱歉,如果這是顯而易見的給別人,但在ActionScript 3.0我不能讓我的身邊事頭(順便說一句巨大的n00b)AS3.0的if/else如果速度控制評價行爲

我對這個代碼控制速度:

public function keyDownHandler(event:KeyboardEvent):void 
    { 
     if (event.keyCode == Keyboard.LEFT) 
     { 
      vx = -5; 
     } 
     else if (event.keyCode == Keyboard.RIGHT) 
     { 
      vx = 5; 
     } 

     else if (event.keyCode == Keyboard.UP) 
     { 
      vy = -5 
     } 
     else if (event.keyCode == Keyboard.DOWN) 
     { 
      vy = 5; 
     } 
    } 

運行時,如果我同時按住左鍵和UP雪碧對角移動,但事實上,最後兩個條件語句(Keyboard.UP & Keyboard.DOWN)是elseifs應該阻止他們正在評估根本不應該嗎?

是否有人能夠闡明這種行爲?

回答

3

當您按下兩個按鈕時,每個按鈕都會觸發兩個獨立事件。如果您想跳過這種情況,您可以爲每個按鈕製作狀態標誌(leftPressed,rightPressed等),更改按鍵處理程序中的狀態並根據每個按鈕的當前狀態調用檢查運動方法。

+0

那它當然的。我是一個傻瓜。感謝那。 – hammus

1

如果你不想對角運動,將速度分量到第一個零這樣的:

public function keyDownHandler(event:KeyboardEvent):void 
{ 
    vx = vy = 0; //// 

    if (event.keyCode == Keyboard.LEFT) 
    { 
     vx = -5; 
    } 
    else if (event.keyCode == Keyboard.RIGHT) 
    { 
     vx = 5; 
    } 

    else if (event.keyCode == Keyboard.UP) 
    { 
     vy = -5 
    } 
    else if (event.keyCode == Keyboard.DOWN) 
    { 
     vy = 5; 
    } 
} 
+0

謝謝你。好的提示。 只是爲了澄清,我想要對角線,但我想了解它爲什麼發生。 – hammus