2015-11-25 92 views
0

製作一個類的遊戲,我無法讓我的角色沿對角線移動。我認爲我在檢測多個按鍵時做錯了什麼,因爲我用一個按鍵測試了walkDownLeft,但是當我嘗試用左右鍵觸發它時,它只是向左走。我是否錯過了某些東西,或者我正在使用的方式不只是去做我想要的東西?需要幫助移動字符對角

public boolean AkeyDown(Event e, int key) { 
     if (key == 1004) { 
     Player.walkUp = true; 
    } 
    if (key == 1005 && key != 1006) { 
     Player.walkDown = true; 
    } 
    if (key == 1005 && key == 1006) { 
     Player.walkDownLeft = true; 
    } 
    if (key == 1006 && key != 1005) { 
     Player.walkLeft = true; 
    } 
    if (key == 1007) { 
     Player.walkRight = true; 
    } 
    return true; 
} 

public boolean AkeyUp(Event e, int key) { 
    if (key == 1004) { 
     Player.walkUp = false; 
    } 
    if (key == 1005 && key != 1006) { 
     Player.walkDown = false; 
    } 
    if (key == 1005 && key == 1006) { 
     Player.walkDownLeft = false; 
    } 
    if (key == 1006 && key != 1005) { 
     Player.walkLeft = false; 
    } 
    if (key == 1007) { 
     Player.walkRight = false; 
    } 
    return true; 
} 
+2

'key'不能同時是'1005'和'1006'。最好使用一系列上/下,左/右標誌,然後根據這些標誌更新x/y位置 – MadProgrammer

回答

1

只是爲了擴大MadProgrammer的評論。 Java中有三種類型的鍵盤事件,keyPressed,keyReleased和keyTyped。

keyPressedkeyReleased絕不會檢測到多個字符。即使你點擊了Ctrl,然後也按了c(好像要複製),你會得到兩個keyPressed事件,一個用於Ctrl,一個用於c。

keyTyped會將多個按鍵組合成一個組合,並且會爲Ctrl + c序列生成一個單一的keyTyped事件(C爲Ctrl + Ctrl)。但是,keyTyped只會結合修改鍵(Ctrl,Alt,Super等)。它不會組合兩個箭頭鍵。這意味着如果用戶按下向上箭頭,然後短按右箭頭,您將獲得兩個keyPressed事件,每個箭頭一個。如果他們然後發佈了密鑰,您將獲得兩個keyReleased事件和兩個keyTyped事件。

所以這就是爲什麼你永遠不會進入的walkDownLeft場景。兩個鍵都不會觸發事件。我會建議只有walkLeft,walkRight,walkUp和walkDown。然後在你的其他線程讀取這些國家有類似:

if(player.walkUp && !player.walkRight && !player.walkLeft) { 
    //Move up 
} else if (player.walkUp && player.walkRight) { 
    //Move upRight 
} else if (player.walkUp && player.walkLeft) { 
    //Move upLeft 
} //... 

如果這些語句可以優化,但我要離開他們的是可讀性。