Problem mit JnR-Steuerung / KeyListener

TimeIsTheKey

Aktives Mitglied
Hallo

Ich habe gerade ein kleines Problem mit meinem "Jump and Run"-Spiel und ich bin mir unsicher, ob es am KeyListener generell liegt oder an meiner Implementierung.

Ist es normal, das der KeyListener eine kurze "Pause" einlegt, wenn man die Pfeiltasten Links/Rechts bzw. Oben/Runter in irgendeiner Reihenfolge drückt?

Ich habe das Problem, das wenn ich mit dem Spieler nach Rechts laufe und dann Links drücke, der KeyListener eine kurze Pause einlegt und wenn ich während dieser z.B. nach Oben drücke, der Spieler nur noch springt, anstatt nach links zu springen.

Die KeyPressed-Methode ist ganz einfach aufgebaut:

Code:
public void keyPressed(KeyEvent e) {
		
		
		if(e.getKeyCode()==KeyEvent.VK_UP){
			player.setUp(true);
			System.out.println("Up");
		}
		
		if(e.getKeyCode()==KeyEvent.VK_DOWN){
			player.setDown(true);
			System.out.println("Down");
		}
		
		if(e.getKeyCode()==KeyEvent.VK_LEFT){
			player.setLeft(true);
			System.out.println("Left");
		}
		
		if(e.getKeyCode()==KeyEvent.VK_RIGHT){
			player.setRight(true);
			System.out.println("Right");
		}
		
		if(e.getKeyCode()==KeyEvent.VK_ESCAPE){
			game_running = false;
		}
	}

Anhand der prints erkenne ich, ob die Tasten erkannt werden oder eben nicht.

Ich habe keine Ahnung wie ich dem Problem ohne komplexe Lösung vorbeugen soll.
Wobei, eine funktionierende komplexe Lösung fällt mir auch nicht ein :/

Hoffe ihr versteht was ich meine und das ihr irgendeine funktionierende (und wenn möglich einfache) Idee habt!

Edit: Eine Lösung die vielleicht funktionieren könnte (ich hab es noch nicht ganz durchgedacht), wäre die Flags die gesetzt werden jeweils doppelt zu verwenden. Sprich jene für die wirklichen Tasteneingaben und dann welche für die spielinterne Bewegung.

MfG
 
Zuletzt bearbeitet:
Was genau meinst du mit Pause?
So wie ich das sehe, ist, wenn ich auf die Pfeiltaste
Code:
<--
drücke left == true. Drücke ich dann auf
Code:
-->
ist right == true. Die Bewegungen sollten sich also aufheben (oder du müsstest left = false hier schon umsetzen, damit der Char direkt nach rechts geht.. Ich weiß ja nicht, was hinter den Methoden so alles steckt, die du dort verwendest). Wird nun
Code:
<--
losgelassen, sollte in keyReleased left = false gesetzt werden => Der Char sollte sich nach rechts bewegen.
 
Ich habe das Problem in der Zwischenzeit schon gelöst.

Probier du mal meine KeyPressed-Methode. Wenn du links drückst und dann rechts, wird in der Konsolenausgabe einen Moment lang nichts ausgegeben. Das meine ich mit Pause. Mit den "doppelten" Flags konnte ich das Problem aber lösen.
Falls du nicht verstehst was mein Problem war, hier ein Konsolenauszug:

Code:
Right
Left
Right R
Up
UpJump
UpJump
Up
Up
Up

Right R ist die loslassen der Pfeiltaste Rechts.
Ich drückte während es noch in dieser Pause war zwischen Links/Rechts nach Oben und da ich die ganze Zeit links/rechts auf falsch setzte, erkannte es links nichts mehr, da ich diese Pause eben ausnutze.

Eine Frage: Der KeyListener erkennt Links/Rechts/Unten gleichzeitig. Links/Rechts/Oben werden aber nicht erkannt. Ist das normal?
 
Ich glaube das hat mit der Tastatur zu tun.. Bei meinen alten PCs hatte ich das auch oft, dass beim Drücken von 3 Tasten gleichzeitg ein Piepen zu hörn war. Nimm mal einen Texteditor wie Notepad++, füll viele Zeilen mit leertasten oder tabs und versuch mal das Caret da mit 3 Tasten gleichzeitig durchzubewegen 😉

Edit: Tastatur ? Wikipedia Die beiden direkt verlinkten Absätze könnten eine Erklärung liefern.
 
Zuletzt bearbeitet:
Ich glaube das hat mit der Tastatur zu tun.. Bei meinen alten PCs hatte ich das auch oft, dass beim Drücken von 3 Tasten gleichzeitg ein Piepen zu hörn war. Nimm mal einen Texteditor wie Notepad++, füll viele Zeilen mit leertasten oder tabs und versuch mal das Caret da mit 3 Tasten gleichzeitig durchzubewegen 😉

Edit: Tastatur ? Wikipedia Die beiden direkt verlinkten Absätze könnten eine Erklärung liefern.

Also mit Links/Rechts/Unten gehts, aber Links/Rechts/Oben funktioniert nicht. Weiss nun aber nicht mehr weiter. Wenn normale Tastaturen, diese Kombination nicht unterstützen wird sie wahrscheinlich in den meisten Spielen gar nicht drin sein, oder? Oder unterstützen gewöhnliche Tastaturen diese Kombination? :bahnhof:
 
Bisher musste ich in keinem Spiel left, right und up arrow gleichzeitig nutzen. Meistens lässt man ja sowieso die Taste left los, wenn man right beginnt zu drücken, weil man sonst stehen bleibt und dafür kann man gleich alle loslassen^^
 
Naja, es ist eigentlich auch nicht wirklich erwünscht, dass Links/Rechts/Oben gedrückt wird, aber falls dies der Fall ist, sollte der Spieler logischerweise trotzdem springen.
 

Neue Themen


Zurück
Oben