【问题标题】:How do I implement a control system for a game in JavaFX?如何在 JavaFX 中实现游戏的控制系统?
【发布时间】:2016-09-14 06:24:57
【问题描述】:

我正在尝试使用 javaFX 为我的简单 2D 游戏创建一个控制系统。我进行了广泛的研究,但无法提出任何建议。

我想做的事:我想设置一系列特殊的按键事件来控制一艘船并调出一个暂停菜单。当我试图使用类似的东西来显示暂停菜单时

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

            }
        }
    }); 

在引用 EventHandler 的类型参数时,我收到“场景类型中的方法 setOnKeyPressed(EventHandler) 不适用于参数 (new EventHandler(){})”警告。我已经看到以这种确切方式使用此表达式的示例。我希望“P”成为拉起暂停菜单的关键。我不确定为什么会收到此错误。在旁白中,我想知道应该调用什么方法来显示场景或窗格?

【问题讨论】:

  • 检查您的导入。你确定这是一个javafx.events.EventHandler,而不是来自另一个库的一些不相关的EventHandler 接口吗?

标签: java javafx


【解决方案1】:

我的做法是在场景的根窗格上设置 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();

【讨论】:

  • 感谢迈克尔的回复!我肯定会尝试你的程序。我感到困惑的一件事是 getCode() 如何不是 KeyEvent 类的成员。顺便说一句,我更喜欢你的实现!
  • KeyEvent 有多个可以调用的函数。所以我想 e.equals(KeyCode.P) wpuld 总是返回 false 或抛出错误,因为事件没有明确等于 KeyCode。对 KeyEvent 使用 getCode() 将返回与该 KeyEvent 关联的 KeyCode。阅读 oracle 文档以获取更多信息docs.oracle.com/javase/8/javafx/api/javafx/scene/input/…
  • 一些供将来参考的东西 Micheal;我发现当使用 setOnKeyPressed 时,声明类型 keyEvent 是不必要的,只传递参数 e 就足够了。我会告诉你这是否 100% 正确。
  • 如果这回答了您的问题,请将其标记为答案。另外,我急切地等待更新:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多