Java KeepPushing Key游戏监听器

时间:2014-10-04 18:20:37

标签: java awt keylistener

我做了一个游戏,船在移动,就像我想移动他一样。但我的问题是当我按下按钮时。我的船正在移动,但他必须等待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"正朝着正确的方向前进。有一种方法可以最快速地从键盘读取?

2 个答案:

答案 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"有很多不同。这就是为什么我的船停了一会儿,我想按任意键几秒钟,但我不知道如何改变时间之间的差异