2012-06-25 23 views
0

我試圖在平臺遊戲中給我的角色一個移動機制,在其中按住左鍵然後右邊將導致角色仍然向左移動,但是以較慢的速度移動(即移動速度/ 2)行走(反之亦然):按鍵的順序特定組合保持功能?

public var leftKey:Boolean = false; 
    public var rightKey:Boolean = false; 
    public var upKey:Boolean = false; 
    public var leftFlag:Boolean = false; 
    function ifKeyDown(event:KeyboardEvent):void 
    { 
     if (event.keyCode == Keyboard.LEFT && rightKey == false) 
     { 
      leftKey = true; 
      if (event.keyCode == Keyboard.LEFT && event.keyCode == Keyboard.RIGHT) 
      { 
       leftFlag = true; 
       trace("leftFlag true"); 
      } 
     } 
     if (event.keyCode == Keyboard.RIGHT && leftKey == false) 
     { 
      rightKey = true; 
     } 
    } 

    function ifKeyUp(event:KeyboardEvent):void 
    { 
     if (event.keyCode == Keyboard.LEFT) 
     { 
      leftKey = false; 
      leftFlag = false; 
     } 
     if (event.keyCode == Keyboard.RIGHT) 
     { 
      rightKey = false; 
     } 
    } 

    public function ifEnterFrame(event:Event):void 
    { 
     if (leftKey == true && leftFlag == false) 
     { 
      player1_mc.x -= mainSpeed; 
      trace("L"); 
     } 

     if (rightKey == true && leftFlag == false) 
     { 
      player1_mc.x += mainSpeed; 
      trace("R"); 
     } 
     if (leftKey == true && rightKey == true) 
     { 
      if (leftFlag == true) 
      { 
       player1_mc.x -= mainSpeed/2; 
       trace("L + R"); 
      } 
      else 
      { 
       player1_mc.x += mainSpeed/2; 
       trace("R + L"); 
      } 
     } 

我的輸出應該是這樣的: 我認爲左鍵 大號 大號 大號 大號 我放開左鍵的。然後, 我抱着右鍵 [R [R [R [R 我放開右鍵的。然後, 我按住鼠標,然後還抱着左 大號 [R R + L 大號 [R R + L 我放手的都有。然後, 我抱着左,那麼還可以右鍵 大號 [R R + L 大號 [R R + L

雖然我知道我的痕跡,該leftFlag沒有運行,我花了幾個小時試圖弄清楚爲什麼無濟於事。 :(

回答

0

我覺得你的問題是這樣的表達:

event.keyCode == Keyboard.LEFT && event.keyCode == Keyboard.RIGHT 

雖然我不熟悉的動作,如果是像Java東西,鍵盤事件爲每個按鍵調用一次「事件」只對應一個鍵,而不是兩個不同的密鑰,因此,你的表達將始終返回false。

解決您的問題,可能會涉及到兩個按下和釋放功能的關鍵是這樣的。

if (event.keyCode == Keyboard.LEFT) 
{ 
    if (leftFlag) 
    { 
     //code here 
    } 
    if (rightFlag) 
    { 
     //code here 
    } 
} 
if (event.keyCode == Keyboard.RIGHT) 
{ 
    if (leftFlag) 
    { 
     //code here 
    } 
    if (rightFlag) 
    { 
     //code here 
    } 
} 

希望有所幫助!