gpt4 book ai didi

java - 如何在 Java 中更快地自动按下按键?

转载 作者:行者123 更新时间:2023-12-01 09:16:31 25 4
gpt4 key购买 nike

我正在尝试制作一款乒乓球游戏,但 Action 很笨拙;每当我按住某个键来移动桨时,都会有轻微的延迟。

例如,我按住一个键,桨会移动一次,然后需要一秒钟才能再次开始连续移动。

有人告诉我这是操作系统的功能,而不是 Java 的功能;但是,我仍然希望在 Java 中找到一种解决方法,以便移动从一开始就平滑且连续,而不必等待操作系统开始自动按键。

有人可以帮忙吗? (我尝试过 boolean 值、按键监听器和“while”循环,但这些对我不起作用。下面写着从这些失败的尝试之一中摘取的一段文字:)

root.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
switch (event.getCode()) {
case UP: paddle1Up = true;
break;
case DOWN: paddle1Down = true;
break;

case W: paddle2Up = true;
break;
case S: paddle2Down = true;
break;
}
}
});

root.setOnKeyReleased(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
switch (event.getCode()) {
case UP: paddle1Up = false;
break;
case DOWN: paddle1Down = false;
break;

case W: paddle2Up = false;
break;
case S: paddle2Down = false;
break;
}
}
});

root.requestFocus();

primaryStage.setTitle("Pong");
primaryStage.setScene(scene);
primaryStage.setOnCloseRequest((event)->System.exit(0));
primaryStage.show();

// This is the main animation thread
new Thread(() -> {
while (true) {
sim.evolve(1.0);
while (paddle1Up){
sim.movePaddle(sim.getPaddle1(), 0, -1);
}
while (paddle1Down){
sim.movePaddle(sim.getPaddle1(), 0, 1);
}
while (paddle2Up){
sim.movePaddle(sim.getPaddle2(), 0, -1);
}
while (paddle2Down){
sim.movePaddle(sim.getPaddle2(), 0, 1);
}

Platform.runLater(()->sim.updateShapes());
try {
Thread.sleep(25);
} catch (InterruptedException ex) {

}
}
}).start();
}

最佳答案

很确定你需要写

case KeyEvent.VK_UP:

当然,除非您扩展 KeyEvent 类。

另外,我认为没有必要在 while 循环中包含 while 循环,而是坚持使用 if 语句:

        while (true) {
sim.evolve(1.0);
if (! paddle1Up){
sim.movePaddle(sim.getPaddle1(), 0, -1);
}

也不确定是否有意为之,请注意 if 语句(您的 while 循环)中的 !

我以前见过很多类似的案例。我也经历过一次,虽然我不确定原因。现在很难说没有看到更多的代码,但我强烈建议 implements the keylistener 并使用那里的方法,与您的代码非常相似,希望它应该在没有问题。您可能已经读过这篇文章 post或者这个post ,如果没有的话也许会有帮助。

希望它对你有用。

关于java - 如何在 Java 中更快地自动按下按键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40512764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com