事件setOnKeyPressed
檢測到一個鍵一次,你不能在一個條件中檢查其中的兩個,因爲它只能應用於一個條件。
你可以做的是創造一些boolean
變量(每個鍵)和setOnKeyPressed
你有單獨檢查每個鍵,如果按下當前關鍵是其中之一,你匹配的變量設置爲true
條件。在檢查哪個鍵被按下後,你檢查兩個變量,如果兩個都是true
然後有人按下兩個鍵。
一個小問題是,變量永遠不會變成false
,如果某人不按下按鍵,該怎麼辦?您可以使用setOnKeyReleased
這是發佈密鑰時調用的關鍵事件。如果密鑰被釋放,則分別檢查每個密鑰並將條件變量設置爲false
。
所以應該這樣做。如果您需要示例代碼,請詢問。
EDIT
的例子展示了波紋管中的JavaFX多鍵按壓的檢測。
首先我需要定義布爾變量來保存我的鍵是否被按下。他們應該是類變量。
boolean keyCommand = false;
boolean keyW = false;
這時我們就需要2個事件添加到我們的場景:當按下按鍵我們每一個
onKeyPressed事件將檢測。請記住,爲每個密鑰分別調用該事件。
onKeyReleased事件將檢測到我們的密鑰不再被按下。這個事件也是分別爲每個鍵調用的。
scene.setOnKeyPressed(e -> {
if(e.getCode() == KeyCode.COMMAND)
keyCommand = true;
else if(e.getCode() == KeyCode.W)
keyW = true;
if(keyCommand && keyW)
//both are pressed
doSomething();
});
我們第二個事件:
scene.setOnKeyReleased(e -> {
if(e.getCode() == KeyCode.COMMAND)
keyCommand = false;
else if(e.getCode() === KeyCode.W)
keyW = false;
});
就是這樣。現在布爾變量可能不是保存數據的完美方式,BooleanProperty
可能更可取,但它應該也可以。
我可以有一些示例代碼?我幾乎不明白你在做什麼。 – compute
請參閱我有一個類似於我實現的想法,但我得到的錯誤是,在lambda表達式中使用的變量應該是最終的或有效的最終結果。所以兩個布爾變量不能使用。 – compute
@compute是否將它們定義爲類變量,而不是方法? – tomtzook