2016-09-13 70 views
0

我正在嘗試使用javaFX爲我的簡單2D遊戲創建一個控制系統。我做了廣泛的研究,但無法提出任何事情。如何在JavaFX中實現遊戲的控制系統?

我想做的事情:我想要設置一系列特殊的按鍵事件來控制船舶並調出一個暫停菜單。當我試圖讓一個暫停菜單使用類似於此

gameScene.setOnKeyPressed(new EventHandler<KeyEvent>() { 
     public void handle(KeyEvent e) { 
      if (e.equals(KeyCode.P) { 

      } 
     } 
    }); 

我得到一個「中的場景類型setOnKeyPressed(事件處理程序)的方法並不適用於爭論的東西來顯示(新的EventHandler(){} )「引用EventHandler類型參數的警告。我已經看到以這種確切方式使用這個表達式的例子。我想'P'是拉起暫停菜單的關鍵。我不確定爲什麼我收到此錯誤。在側面投票我想知道我應該調用什麼方法來顯示場景或窗格?

+0

檢查您的導入。你確定這是'javafx.events.EventHandler',而不是來自另一個庫的一些不相關的'EventHandler'接口嗎? – Douglas

回答

0

我這樣做的方式是在場景的根窗格上設置onKeyPressed集。

因此,像

BorderPane root = new BorderPane(); 
root.setOnKeyPressed((KeyEvent e) -> { 
    if (e.getCode().equals(KeyCode.P) { 
     //Open Pause Menu 
    } 
}); 

編輯1: 不要忘了用root來打開你的場景。

Scene gameScene = new Scene(root); 
stage.setScene(gameScene); 
stage.show(); 
+0

謝謝Micheal的回覆!我絕對會嘗試你的程序。我感到困惑的一件事是getCode()不是KeyEvent類的成員。我喜歡你的實現更好btw! –

+0

KeyEvent有多個可以調用的函數。所以我會想象e.equals(KeyCode.P)wpuld總是返回false,或者拋出一個錯誤,因爲一個事件並不明確地等於一個KeyCode。在KeyEvent上使用getCode()將返回與該KeyEvent關聯的KeyCode。閱讀oracle文檔以獲得更多信息https://docs.oracle.com/javase/8/javafx/api/javafx/scene/input/KeyEvent.html –

+0

某些未來的參考資料Micheal;我發現在使用setOnKeyPressed時,聲明keyEvent類型是不必要的,只是傳遞參數e就足夠了。我會更新你是否100%正確。 –