Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.
Als je een toets indrukt dan krijg je een keyPressed event. Als je 'm weer loslaat krijg je een keyReleased event. In de tijd die ertussen zit is de toets dus ingedrukt
(Als je een spel maakt waarin je een poppetje kunt besturen met het toetsenbord, dan gebruik je ook keyPressed en keyReleased. Je houdt gewoon een lijst bij van welke toetsen er zijn ingedrukt, en in je gameloop kijk je gewoon naar iets als: is LINKS ingedrukt? Zo ja, loop dan naar links)
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Verwijderd
(stel ik heb een vecht spelletje, je moet combo's maken, je check dan of UP en LEFT ingedrukt zijn op het moment dat je op KICK drukt)
ik dacht dat dat in win32 kon met GetAsyncKeyState(). is daar een java alternatief voor?
(btw .oisyn, je loopt nog een uur voor
[ Voor 8% gewijzigd door Verwijderd op 30-03-2004 22:45 ]
Overigens ligt het nogal aan je hardware (toetsenbord dus) hoeveel en welke toetsen er in combinatie ingedrukt kunnen worden
(En nee, dan zou ik 2 uur voorlopen, maar ik heb die post afgelopen nacht al gedaan. Bovendien is de klok een uur vooruit gegaan, dus ik kon hooguit een uur achter lopen
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| static final int UP = 0; static final int DOWN = 1; static final int LEFT = 2; static final int RIGHT = 3; // ik ben een lefty :P ... boolean []keys = new boolean[4]; for (int i = 0; i < 4; i++) { keys[i] = false; } ... if (keys[UP] && keys[LEFT]) { // handle left-up } |
More than meets the eye
There is no I in TEAM... but there is ME
system specs
Verwijderd
(mooi is anders maar het illustreert de werking prima)
edit: aangepast, beter gedrag
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
| import java.awt.*; import java.awt.event.*; class Keystest extends Frame implements KeyListener { public static boolean keys[] = new boolean[5]; public Keystest() { addKeyListener(this); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { dispose(); System.exit(0); } }); } public static void main(String args[]) { System.out.println("Starting Keystest..."); Keystest mainFrame = new Keystest(); mainFrame.setSize(400, 400); mainFrame.setTitle("Keystest"); mainFrame.setVisible(true); keys[4] = false; while (keys[4] == false) { //do game loop try {Thread.sleep(10);} catch (Exception e){} printKeys(); } mainFrame.dispose(); } public void keyTyped(KeyEvent e) { } public void keyPressed(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_UP: keys[0]=true; break; case KeyEvent.VK_DOWN: keys[1]=true; break; case KeyEvent.VK_LEFT: keys[2]=true; break; case KeyEvent.VK_RIGHT: keys[3]=true; break; case KeyEvent.VK_ESCAPE: keys[4]=true; break; } } public void keyReleased(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_UP: keys[0]=false; break; case KeyEvent.VK_DOWN: keys[1]=false; break; case KeyEvent.VK_LEFT: keys[2]=false; break; case KeyEvent.VK_RIGHT: keys[3]=false; break; } } public static void printKeys() { if (keys[0]) System.out.print("UP "); if (keys[1]) System.out.print("DOWN "); if (keys[2]) System.out.print("LEFT "); if (keys[3]) System.out.print("RIGHT "); for (int i=0; i<4; i++) { if (keys[i]) {System.out.println();return;} } } } |
[ Voor 15% gewijzigd door Verwijderd op 31-03-2004 00:02 ]
Verwijderd
Dus: kan je het keyboard pollen vanuit java?
zolang je je toets niet los laat krijg je geen keyReleased Event.
Die repeat slaat alleen op het ingedrukt houden van een toets. Een keypress krijg je zo goed als direct, een keyrelease ook. Die repeat timer slaat alleen op de volgende keypresses nadat je al eens een keypress hebt gehad, dus daar ben je sowieso niet in geinteresseerdVerwijderd schreef op 30 maart 2004 @ 23:16:
Maar er is wel een probleem, als je nl een (actie) spel maakt wil je niet dat je moet wachten op de key-repeat timer. In mijn bios staatdie op 500 ms, dus na de eerste keypress duurt het 500 ms voordat de stroom op gang komt. Ik denk dat din ook is wat TS bedoelde.
Dus: kan je het keyboard pollen vanuit java?
Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.
Verwijderd
Ik ga maar es slapen denk ik
[ Voor 52% gewijzigd door Verwijderd op 31-03-2004 00:05 ]
dat zeg ik.oisyn schreef op 30 maart 2004 @ 23:27:
[...]
Die repeat slaat alleen op het ingedrukt houden van een toets. Een keypress krijg je zo goed als direct, een keyrelease ook. Die repeat timer slaat alleen op de volgende keypresses nadat je al eens een keypress hebt gehad, dus daar ben je sowieso niet in geinteresseerd