2014-10-04 37 views
-1

我做了一个游戏,船正在移动,就像我想要移动他。但我的问题是当我按下按钮。我的船正在移动,但他必须等待1秒才能开始正确移动。Java KeepPushing游戏关键字

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

请勿使用“幻数”。 37,38,39 40对于读取你的代码的人没有任何意义。

但我的问题是当我按了一个按钮。我的船正在移动,但他必须等待1秒才能开始正确移动。

然后你有一个没有发布的代码的问题。 Java将立即响应KeyEvent。

但是,如果按住按键,则会有一个重复事件的“延迟”。这个延迟取决于操作系统。如果您需要处理重复事件的能力,那么您应该使用自己的Timer安排这些事件。查看Motion Using the Keyboard了解关于此主题以及工作代码的更多想法。

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”是很多的区别。这就是为什么我的船正在停止一段时间,当我想按任何键几秒钟,但我不知道如何改变时间间隔