因此,作为参考,我正在跟踪Trystan关于java的roguelike教程。
上面的教程使用关键侦听器,它不适用于Mac (社区似乎不鼓励),所以我尝试更改代码以使用键绑定。
这里有个问题。在他的"roguelike游戏“中,游戏分为屏幕,每个屏幕对于一个特定的键都有不同的动作。例如,“开始屏幕”在按enter键时将播放机发送到“播放屏幕”:
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;
}
}
当“播放屏幕”按下enter键将播放机发送到"Win屏幕“时:
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;
}
}
现在,从键绑定示例(如这和这 )中可以看到,所有绑定和操作似乎都“转储”到一个类中。这是不能令人满意的,因为:
是否有一种方法可以使键绑定使一次击键根据“屏幕”执行不同的操作?我能用条件吗?我是否可以将键绑定逻辑放在其他类(屏幕)中,然后在主类中调用它们,就像上面的键侦听器所发生的那样?
发布于 2015-04-09 17:12:17
键绑定不一定转储到一个类中。它们与输入映射相关联,而输入映射又与特定的JComponent
相关联。如果在表示该屏幕的WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
输入映射中注册屏幕特定的绑定,则当该屏幕中的任何组件都具有键盘焦点时(假设其中的某个组件没有覆盖其自身的绑定),则会识别它们,但当另一个屏幕中的组件具有焦点时则不会。
总的来说,该系统非常灵活。您可能会考虑阅读关于本主题的Java教程部分来提高自己的速度。
https://stackoverflow.com/questions/29544407
复制相似问题