Lieber Besucher, herzlich willkommen bei: DeveloperTalk. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.
Zitat
void keyPressed(KeyEvent e)
Invoked when a key has been pressed.
void keyReleased(KeyEvent e)
Invoked when a key has been released.
![]() |
Java-Quelltext |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
@Override public void keyPressed(KeyEvent e) { this.getPlayer().keyPressed(e.getKeyCode()); this.repaint(); } @Override public void keyReleased(KeyEvent e) { this.getPlayer().keyReleased(e.getKeyCode()); this.repaint(); } |
Benutzer, die sich für diesen Beitrag bedankt haben:
niklas319 (03.10.2012)
Vielleicht verstehe ich dich falsch, aber wie willst du denn bitte eine aktive Bewegung graphisch darstellen ohne neu zu zeichnen?eigentlich meinte ich, dass es eben _nur_ dann neu gezeichnet wird, wenn man eine Taste runter drückt. Aber halt nicht wenn eine Bewegung aktiv ist.
![]() |
Java-Quelltext |
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 |
public class Player { public static int x_pos = 100; public static int y_pos = 50; public static int x_speed = 0; public static int y_speed = 0; public static void move() { x_pos += x_speed; y_pos += y_speed; } } public class Main { while (running) { repaint(); Player.move(); thread.sleep(30); } public void paint (Graphics g) { g.drawImage(Player.img, Player.x_pos, Player.y_pos, this); } public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_W ) { y_speed = -2; } if (e.getKeyCode() == KeyEvent.VK_A ) { x_speed = -2; } if (e.getKeyCode() == KeyEvent.VK_S ) { y_speed = 2; } if (e.getKeyCode() == KeyEvent.VK_D ) { x_speed = 2; } } public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_W ) { if (y_speed == -2) { y_speed = 0; } } if (e.getKeyCode() == KeyEvent.VK_A ) { if (x_speed == -2) { x_speed = 0; } } if (e.getKeyCode() == KeyEvent.VK_S ) { if (y_speed == 2) { y_speed = 0; } } if (e.getKeyCode() == KeyEvent.VK_D ) { if (x_speed == 2) { x_speed = 0; } } } } |
Um mal liros Beitrag zu ergänzen:Das ist klar, aber der Spieler soll sich bei mir ja nur über die Tasten bewegen.
Benutzer, die sich für diesen Beitrag bedankt haben:
Erik (05.10.2012)
Zitat
die nach jedem Durchlauf eine gewisse Zeit wartet (z. B. 50 ms)
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Erik« (05.10.2012, 22:43)
Benutzer, die sich für diesen Beitrag bedankt haben:
far (06.10.2012), Johannes S. (06.10.2012)
Das kenne ich, ist wirklich genialhier ein richtig gutes tutorial dazu: http://fivedots.coe.psu.ac.th/~ad/jg/
ist es echt wert zu lesen ;D
Stimmt, hab's nochmal nachgeguckt - ist ja quasi wie wenn man bei einem Textverarbeitungsprogramm einen Buchstaben gedrückt hält. Für ein Spiel ist das aber trotzdem ungeeignet, weil man nicht kontrollieren kann, in welchen Abständen das keyEvent ausgelöst wird. Du merkst ja auch selbst, dass beim Drücken einer Taste die Graphik erst einmal bewegt wird, dann kurz aussetzt und sich dann weiterbewegt.
Zitat
Aber bei keyPressed bin ich anderer Meinung, die Funktion wird auch getriggert, wenn man eine Taste z.B. D gedrückt hält.
Benutzer, die sich für diesen Beitrag bedankt haben:
niklas319 (06.10.2012)
Zitat von »Erik«
hier ein richtig gutes tutorial dazu: http://fivedots.coe.psu.ac.th/~ad/jg/
ist es echt wert zu lesen ;D
Das kenne ich, ist wirklich genialAber für Niklas' Zwecke wohl zu krass
![]()
@niklas, das geht da nicht nur um 3d programmierung, das kommt erst später... es geht viel um allgemeine konzepte in der spieleprogrammierung mit java, wie zum beispiel die delta-loop, verschiedene timer-klassen... das beispiel ist da am anfang ja auch ein 2d spiel... gibts auch super viel hintergrund wissen und so, ist echt nice... ist nur blöd, dass man sich irgendwie jedes kapitel einzeln runterladen muss xD
vielleicht kann man einfach eine etwas direktere methode benutzen, um die inputs zu verarbeiten, als die awt keyevents?
Ja leider, das stört mich auch immer wieder an Java@fukar wenn du mit minifunktionen die getter und setter meinst, das ist doch normal? also public instanz-variablen würde ich fast nir benutzen, außer bei ganz ganz simplen utilities, wo sich das sonst net lohnt, da das fast schon primitive datentypen sind, bzw sowas wie structs, die sonst keine funktionen haben...
![]() |
Java-Quelltext |
1 2 3 4 |
private void updateTop() { this.setY(this.getY() - this.PIXEL_MOVE_PER_STEP); } |
![]() |
Java-Quelltext |
1 |
y -= 3;
|