# Tastatur für zwei Spieler teilen?



## Redfrettchen (7. Jan 2006)

Hi,
hab mich mal mit dem SpaceInvaders-Tutorial beschäftigt und das ganze Spiel ein bisschen erweitert, zum Beispiel auf die Möglichkeit des Multiplayer-Spiels (an einem PC). Die Spieler müssen sich also die Tastatur teilen (ASDW bzw. Pfeiltasten). Doch beim Spielen konkurrieren die Tasteneingaben sozusagen, d.h. wenn der eine Spieler eine Taste drückt, kann der andere zwar drücken, aber es kommt nicht zu einer Übertragung. Mir ist schon klar, dass die Tastatur einen internen Puffer hat und der damit etwas zu tun haben könnte, dass man nicht zwei Tasten gleichzeitig gedrückt halten kann (außer die funktionalen Tasten wie Shift oder Control zusammen mit nem Buchstaben).
Aber vielleicht liegt es ja auch an der Software, denn bei dem Freewarespiel Gene Rally zum Beispiel funktioniert das Tastaturteilen ja eigentlich. (Vielleicht stell ich mich auch einfach zu blöd an)

Vielen Dank für Hinweise und Ratschläge!


----------



## dieta (7. Jan 2006)

Ich würde mal sagen, dass das an der Java-Ereignisbehandlung liegt. Ich hab das mal gerade ausprobiert. Wenn eine Taste gedrückt ist und noch eine Zweite gedrückt wird, dann wird der Tastendruck der ersten Taste nicht mehr verarbeitet, sondern ab dann kommen nur noch KeyEvents für die zweite Taste an.
Kannst du hiermit ganz leich ausprobieren:

```
import javax.swing.*;
import java.awt.event.*;
import javax.swing.*;

class test extends JFrame
{
	
	public test()
	{
		addKeyListener(new KeyHandler());
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 400, 300);
		setVisible(true);
	}
	
	class KeyHandler implements KeyListener
	{
		public void keyPressed(KeyEvent evt)
		{
			System.out.println("Key Pressed: "+Integer.toString(evt.getKeyCode()));
		}
		
		public void keyReleased(KeyEvent evt)
		{
			System.out.println("Key Released: "+Integer.toString(evt.getKeyCode()));
		}
		
		public void keyTyped(KeyEvent evt)
		{
			System.out.println("Key Typed: "+Integer.toString(evt.getKeyCode()));
		}
	}
	
	public static void main(String[] arguments)
	{
		test t = new test();
	}
	
}
```


----------



## Redfrettchen (16. Jan 2006)

Und es gibt keine Möglichkeit die Ereignisbehandlung so hinzubiegen, dass er zwischendurch mal nach anderen Tasten fragt, wenn eine Taste gedrückt wird? Oder eine Alternative zu den Events?


----------



## lin (16. Jan 2006)

Reicht doch völlig, wenn sich die Taste meldet, wenn sie gedrückt wird und wenn sie losgelassen wird.
In der Zeit in der zwar ein KeyPressed-Event gekommen ist, aber noch kein Released darfst du auch ohne dass die Taste ständig schreit ("ich werd gedrückt; ich werd gedrückt") annehmen, dass sie gedrückt wird  .


----------



## Gast (12. Jun 2006)

Hab das selbe Problem, hat hier jemand nun schon eine Lösung für, mit der letzten antwort, kann ich leider nichts anfangen

Danke.


----------



## Wildcard (12. Jun 2006)

Wie lin schon gesagt hat musst du dir merken welche Taste gedrückt wurde.
Die keyTyped() Methode ist für Spiele völlig nutzlos. Nur keyPressed und keyReleased sind hier interesant.


----------



## Gast (12. Jun 2006)

ich benutze keyPressed nur nicht Keyreleased...

Wenn dann quasi der andere drückt setzt er den anderen außer kraft.
Ich soll also boolsche Werte speichern wenn pressed und zurücksetzen wenn released, aber passiert da nicht das selbe?
Könntet ihr da genauer werden?

Danke....


----------



## Wildcard (12. Jun 2006)

Du erhälst ein keyPressed wenn die Taste gedrückt wird. Jetzt weißt du der Spieler will in die und die Richtung.
Du merkst dir also das die Taste gedrückt wurde und reagierst entsprechend. Das tust du solange bis du ein keyReleased erhälst. Damit ist klar das die Taste nun nichtmehr gedrückt ist.


----------



## derDachs (12. Jun 2006)

Recht herzlichen Dank!


----------

