# 2 Spieler Steuerung



## luftdufd (1. Dez 2005)

Hallo!
Sorry falls dieses thema bereits einmal behandelt wurde ich hab aber nichts gefunden.
ich schreibe gerade einen Pong Clone schreibe.
Es funktioniert auch alles prächtig bis auf die tastatureingabe.
Wenn ein 2 spieler spiel gestartet wird und beide spieler halten ihren z.B "moveleft" key gedrückt. bewegt sich immer nur der balken des Spielers der als 2tes gedrückt hat. Hier meine 2 Listener die dem Frame der Applikation geaddet werden.


```
KeyFirst=new KeyListener() {
		
			public void keyReleased(KeyEvent arg0) {
				// TODO Auto-generated method stub
		
			}
		
			public void keyPressed(KeyEvent arg0) {
				if (arg0.getKeyCode()==KeyEvent.VK_LEFT){
					pf.paddle1.moveleft();
					pf.repaint();
				} else if (arg0.getKeyCode()==KeyEvent.VK_RIGHT){
					pf.paddle1.moveright();
					pf.repaint();
				}
		
			}
		
			public void keyTyped(KeyEvent arg0) {
			}
		};
		KeySec=new KeyListener() {
			
			public void keyReleased(KeyEvent arg0) {
				// TODO Auto-generated method stub
		
			}
		
			public void keyPressed(KeyEvent arg0) {
				if (arg0.getKeyCode()==KeyEvent.VK_A){
					pf.paddle2.moveleft();
					pf.repaint();
				} else if (arg0.getKeyCode()==KeyEvent.VK_D){
					pf.paddle2.moveright();
					pf.repaint();
				}
		
			}
```

Irgendwie muss das doch gehen das auch beide eine taste gedrückt halten können und beide bewegen sich?
Vielen Dank im voraus.
luftdufd


----------



## BLiNK (2. Dez 2005)

Starte einen Thread für jede Taste die gedrückt wird und lass davon die Bewegung ausführen. Stoppe die Threads, wenn die Taste losgelassen wird. Ist eigentlich recht einfach und funktioniert.


----------



## jimmy (8. Dez 2005)

Etwas spät aber ... 

Ich würde Flacks für die einzelnen Tasten setzen. Also, wenn du eine Taste drückst setzt du irgendwo eine Variable auf true und beim loslassen auf false.

Nun kannst du in deinem Hauptthread wo dein spiel läuft und berechnet wird die Flags zu jedem beliebigen Zeitpunkt der dir am bessten passt abrufen.

So ist es dann auch leichter eine Pause zu implementieren, da du dann ja weniger Threads stoppen/pausieren lassen musst. Nämlich nur einen der die Flags prüft.

Ausserdem, kannst du so auf Kombinationen leichter reagieren. Also z.B Taste-w ist hoch und Taste-d ist nach rechts, dann wäre ja w+d nach schräg vorne. Oder noch eine Extra Taste wie Turbo, wo dann die Vorwärzbewegung 3mal so schnell wäre wie original also z.B. Taste-d + Taste-t.


----------



## dschavva (26. Jul 2007)

Hi!

Zu den Flags..., wir haben in unserem Projekt (Achtung, die Kurve!) auch Flags benutzt, nur ist es bei uns leider so, dass wenn wir zu zweit z.b. spielen, wenn einer eine seiner beiden Richtungstasten gedrückt hält der andere Spieler gar nicht machen kann. SPrich er wird solange der andere seinen Steuerknopf gedrückt hat, blockiert.

Wir benutzen keyPressed und keyReleased, und bei Gedrückthalten von einer Richtungstaste soll die Kurve (Schlange, wie man sie auch nennen mag...) solange einen Richtungswechsel in die gedrückte Richtung vollziehen!

Nur haben wir jetzt da obige Problem, weiß jemand, ob des vllt an einem allgemeinem Problem liegt, bzw. ob das Programm vllt zu langsam ist, weil objektorientiert?

Danke!
MfG dschavva  (Henning, René, Matthias)


----------



## tuxedo (26. Jul 2007)

Naja, ihr habt, so wie sich das anhört, die Auswertung der Tasten (pressed/released) nicht richtig vom Rest des Programms entkoppelt. 

Benutzt hier am besten entsprechend Threads die die Programmlogik von den Benutzereingaben entkoppeln.


----------

