作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试制作一款乒乓球游戏,但 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/
我是一名优秀的程序员,十分优秀!