2014-10-04 2 views
-1

Я сделал игру, в которой корабль движется, как будто я хочу его переместить. Но моя проблема в том, что я нажал кнопку. Мой корабль движется, но ему нужно подождать 1 секунду, чтобы начать двигаться правильно.Java KeepPushing Key game Listener

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". Ive получил

s 810407913 
s 1312851842 
s 1344314575 
s 1377971356 
s 1409969550 
s 1441512603 
s 1475051136 
s 1507228263 

между первым и вторым «с» является большой разницей. Вот почему мой корабль останавливается некоторое время, когда я хочу нажимать любую клавишу в течение нескольких секунд, но я не знаю, как изменить эту разницу между временем