Wcisnięty button, czas oczekiwania pomiedzy

0

Witam mam niewielki problem, który urasta do ogromnej rangi. Stworzyłem sobie gre, w niej gdy wcisnę strzałkę statek zatrzymuje się na chwile a następnie zaczyna się poruszać. Problem polega na czasie "oczekiwania" miedzy okresem kiedy java wczyta ze nacisnąłeś i kiedy uzna ze dalej jest wciśnięty przycisk. Aby pokazać mój problem zamieszczam kod

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) {

}

}

kiedy nacisnę przycisk "s" w wyniku dostaje

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

miedzy pierwszym i drugim "s" jest znacząca różnica czasu i nie wiem jak sobie poradzić z tym drobnym a zarazem denerwującym problemem. Jeżeli temat był na forum to przepraszam bo nie znalazłem.

0

to jest wina windowsa. Włącz sobie notatnik i wciśnij dowolny klawisz i patrz jak się pisze ;) jest taka przerwa miedzy pierwszym a drugim

edit:
Na szybko cos takiego wymyslone:

public class InputManager implements KeyListener{
	
	private boolean [] keys = new boolean [600];
	
	
	public boolean isPress(int key){
		return keys[key];
	}
	
	@Override
	public void keyPressed(KeyEvent e) {
		keys[e.getKeyCode()] = true;
	}

	@Override
	public void keyReleased(KeyEvent e) {
		keys[e.getKeyCode()] = false;
	}

	@Override
	public void keyTyped(KeyEvent e) {
		keys[e.getKeyCode()] = true;
		keys[e.getKeyCode()] = false;
	}
}
 
1

Zrób sobie tak że na key pressed odpalasz timera i wykonujesz zadanie na Timerze . Na key released kończysz Timera i wsio :)

0

Bardzo ciekawy sposób, dziękuje za odpowiedź. Ja całą gre mam w jednym timerze i w keypressed edytuje zmienna ktora w timerze sprawdzam czy mam ruszac czy tez nie i nie wiem jak dostosować twoją radę.

#edit

w sumie moge stworzyc drugiego timera odpowiedzialnego tylko i wylacznie za ruch :) Dzieki za wszystko Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1