簡體   English   中英

具有多個動作的Java鍵綁定

[英]Java key bindings with multiple actions

因此,作為參考,我正在遵循Trystan的針對Java的roguelike教程

上面的教程使用了“密鑰偵聽器”,該偵聽器不適用於Mac OS X(並且似乎不鼓勵社區使用),因此我試圖將代碼更改為使用“密鑰綁定”。

這是問題。 在他的“流氓類游戲”中,游戲被划分為多個屏幕,其中每個屏幕都有針對特定鍵的單獨操作。 例如,按下回車鍵后,“開始屏幕”會將播放器發送到“播放屏幕”:

public class StartScreen implements Screen {

    public void displayOutput(AsciiPanel terminal) {
        terminal.write("rl tutorial", 1, 1);
        terminal.writeCenter("-- press [enter] to start --", 22);
    }

    public Screen respondToUserInput(KeyEvent key) {
        return key.getKeyCode() == KeyEvent.VK_ENTER ? new PlayScreen() : this;
    }
}

在按下回車鍵的同時,“播放屏幕”將播放器發送到“獲勝屏幕”時:

public class PlayScreen implements Screen {

    public void displayOutput(AsciiPanel terminal) {
        terminal.write("You are having fun.", 1, 1);
        terminal.writeCenter("-- press [escape] to lose or [enter] to win --", 22);
    }

    public Screen respondToUserInput(KeyEvent key) {
        switch (key.getKeyCode()){
        case KeyEvent.VK_ESCAPE: return new LoseScreen();
        case KeyEvent.VK_ENTER: return new WinScreen();
        }

        return this;
    }
}

現在,從鍵綁定示例(例如thisthis)中可以看到,所有的綁定和動作似乎都“轉儲”到一個類中。 這是不令人滿意的,因為:

  1. 一次擊鍵只會導致一個動作(我想我可以讓該動作進行一次切換,檢查我所在的屏幕,然后執行特定於所述屏幕的代碼,但是也許有更好的方法。)
  2. 確定來自/針對哪個屏幕的動作變得更加困難。

是否有一種方法可以使按鍵綁定使一個按鍵根據“屏幕”執行不同的操作? 我會只使用條件嗎? 是否可以將鍵綁定邏輯放在其他類(屏幕)中,然后再在主類中調用它們,就像上面的鍵偵聽器一樣?

鍵綁定不一定要轉儲到一個類中。 它們與輸入映射關聯,而輸入映射又與特定的JComponent關聯。 如果您在代表該屏幕的JComponentWHEN_ANCESTOR_OF_FOCUSED_COMPONENT輸入映射中注冊了特定於屏幕的綁定,則當該屏幕中的任何組件都具有鍵盤焦點時(假設兩者之間的組件未使用其自身覆蓋該綁定),它們將被識別,但是當另一個屏幕中的組件具有焦點時則不會。

總體而言,該系統非常靈活。 您可以考慮閱讀有關此主題的Java教程部分,以使自己入門。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM