我做了一个游戏,船在移动,就像我想移动他一样。但我的问题是当我按下按钮时。我的船正在移动,但他必须等待1秒钟才能开始正确行驶。
public void keyPressed(KeyEvent e) {
int jakiPrzycisk = e.getExtendedKeyCode();
if(jakiPrzycisk == 39 )
{
kierunek="prawo";
czyRuch = true;
}
if(jakiPrzycisk == 37)
{
kierunek="lewo";
czyRuch = true;
}
if(jakiPrzycisk == 38)
{
kierunek="gora";
czyRuch = true;
}
if(jakiPrzycisk == 40)
{
kierunek="dol";
czyRuch = true;
}
在游戏中我会检查他是否会随着" czyRuch"我和" kierunek"正朝着正确的方向前进。有一种方法可以最快速地从键盘读取?
答案 0 :(得分:2)
不要使用“魔术数字”。 37,38,39 40对任何阅读你代码的人都没有任何意义。
但我的问题是当我按下按钮时。我的船正在移动,但他必须等待1秒钟才能开始正确行驶。
然后您遇到了未发布的代码问题。 Java将立即响应KeyEvent。
但是,如果按住键,重复事件会有“延迟”。此延迟取决于操作系统。如果您需要处理重复事件的能力,那么您应该使用自己的Timer
来安排这些事件。查看Motion Using the Keyboard,了解有关此主题的更多想法以及工作代码。
答案 1 :(得分:0)
是的,对不起,这是我的错误。现在我可以向你展示一个我遇到问题的例子。
有一个示例代码
public class KeyTest extends JFrame implements KeyListener {
long start;
long end;
public KeyTest() {
super("KeyListener Test");
setPreferredSize(new Dimension(300, 100));
addKeyListener(this);
start = System.nanoTime();;
pack();
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override
public void keyPressed(KeyEvent evt) {
end = System.nanoTime();;
char c = evt.getKeyChar();
System.out.print(c+" ");
System.out.println(end-start);
}
@Override
public void keyReleased(KeyEvent evt) {
}
@Override
public void keyTyped(KeyEvent evt) {
}
}
当我按任意键时,例如" s"。我有一个
s 810407913
s 1312851842
s 1344314575
s 1377971356
s 1409969550
s 1441512603
s 1475051136
s 1507228263
在第一和第二之间" s"有很多不同。这就是为什么我的船停了一会儿,我想按任意键几秒钟,但我不知道如何改变时间之间的差异