【问题标题】:React on User Keyevents whitout laggs JavaFx对用户关键事件做出反应而不滞后 JavaFx
【发布时间】:2017-10-19 01:00:44
【问题描述】:

我要做的第一件事就是为我的英语道歉,我会尽量写得通俗易懂。 另外,我已经尝试搜索此问题的解决方案,但直到现在我才找到..

代码有问题的部分如下:

    //eventmanagement for the bat
    scene.setOnKeyPressed (new EventHandler <KeyEvent> () {
        public void moveBat(double speed) {
            if ((speed > 0) && ((bat.getLayoutX() + bat.getWidth())<scene.getWidth())){
                bat.setLayoutX(bat.getLayoutX() + speed);
            }
            if ((speed < 0) && ((bat.getLayoutX() > 0))){
                bat.setLayoutX(bat.getLayoutX() + speed);
            }
        };

        @Override
        public void handle(KeyEvent event){
            if (event.getCode().toString() == "RIGHT"){
                this.moveBat(batVelocity);          
        }
            if (event.getCode().toString() == "LEFT"){
                this.moveBat(-batVelocity);
        }
    }
    });

这东西有效,但是如果我按下左键,我没有松开它,所以让它保持按下状态,然后“蝙蝠”将向左移动一次,然后延迟大约 1 秒,然后继续向左移动。

我希望在按住 LEFT 按钮的时间内继续向左移动。有人知道如何解决这个问题吗?

非常感谢您的时间和回答!

克鲁兹

【问题讨论】:

标签: java javafx


【解决方案1】:

所以,OnKeyPressed 在第一次按下某个键时触发,然后每隔一秒左右触发一次。如果您希望某事连续发生,而不是在OnKeyPressed 事件触发时发生,请考虑让OnKeyPressedOnKeyReleased 控制某种boolean keyIsPressed,并在某种while 循环中使用它。所以OnKeyPressed 会设置keyIsPressed=trueOnKeyReleased 会做相反的事情

【讨论】:

  • 不是一个while循环,它会锁定应用程序。使用带有绘图的Timeline 作为关键帧的事件,在按下键时播放并在释放时停止。
  • @MouseEvent 谢谢,你说得对,我没想到,我输入得很快。
  • 这个对我有帮助,感谢时间线评论!!
【解决方案2】:

所以你想要做的就是将你的 KeyCode 保存到一个列表中并在你的 AnimationTimer 中检查它:

字段

    private List<KeyCode> input = new ArrayList<>();

和您的听众

    scene.setOnKeyPressed((KeyEvent event) -> {
        input.add(event.getCode());
    });
    scene.setOnKeyReleased((KeyEvent event) -> {
        input.remove(event.getCode());
    });

在你的 AnimationTimer 中:

    if (input.contains(KeyCode.RIGHT)) {
        //do something
    }
    if (input.contains(KeyCode.LEFT)) {
        //do something else
    }

【讨论】:

  • @Crutz 我的回答对你有帮助吗?如果不让我知道。如果:那么请将其标记为答案!
  • 嗨,我试过了,但我还是有同样的问题!可悲的是它没有改变任何东西..如果我按住右按钮,它仍然会等待一秒钟,直到它不断向右移动。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-27
  • 2021-06-23
  • 1970-01-01
  • 1970-01-01
  • 2016-11-04
  • 1970-01-01
相关资源
最近更新 更多