Hier ist ein Tutorial auf das du vielleicht mal einen Blick werfen solltest. Es geht erst um C# und hinterher genauer um XNA. Das wird dir mit Sicherheit schon mal ordentlich weiter helfen. Was dein Problem mit den Tasten angeht, du kannst den aktuellen Zustand der Tastatur speichern. Wenn du dir jetzt den aktuellen Zustand der Tastatur speicherst und den Zustand der Tastatur beim letzen Update Durchlauf, dann kannst du damit eine Menge anfangen. Wie du an den Zustand kommst, hast du ja schon raus gefunden. In deinem Fall "keyState". Diese Variable ist ja vom Typ KeyboardState. Wenn du dir jetzt zwei Variablen von diesem Typ in deiner Klasse speicherst, kannst du darin die beiden Zustände der Tastatur ablegen. Als Beispiel nenne ich die Beiden Variablen mal "currentState" und "lastState".
|
C#-Quelltext
|
1
2
|
KeyboardState currentState;
KeyboardState lastState;
|
In deiner Update Funktion musst du dafür sorgen, dass currentState den aktuellen Zustand der Tastatur beinhaltet und lastState den vom letzten Frame. Also einfach am Anfang von "Update" folgendes machen:
|
C#-Quelltext
|
1
2
|
lastState = currentState; // currentState hat in diesem Moment noch den Zustand vom letzten Frame. Diesen wollen wir speichern.
currentState = Keyboard.GetState(); // hier wird currentState nun auf den aktuellen Zustand gesetzt.
|
Jetzt einfach mal 4 Beispiele, was man damit so machen kann:
|
C#-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
if(currentState.IsKeyDown(Keys.A))
{
// Taste A wird aktuell gedrückt
}
if(currentState.IsKeyUp(Keys.A))
{
// Taste A wird aktuell nicht gedrückt
}
if(currentState.IsKeyDown(Keys.A) && lastState.IsKeyUp(Keys.A))
{
// Tasta A wird in diesem Moment runter gedrückt. Auch wenn die Taste im nächsten Frame noch gedrückt wird ist die Abfrage nur beim ersten mal true
}
if(currentState.IsKeyUp(Keys.A) && lastState.IsKeyDown(Keys.A))
{
// Taste A wird in diesem Moment losgelassen. Auch hier ist die Abfrage nur in dem Frame true.
}
|
Das ganze kannst du dir jetzt noch in eine extra Klasse stecken die dann Methoden für diese 4 Möglichkeiten bekommt. Sowas wie:
|
C#-Quelltext
|
1
2
3
4
|
public bool IsKeyHit(Keys key)
{
return currentState.IsKeyDown(key) && lastState.IsKeyUp(key);
}
|
Nur als Beispiel. Aber wie gesagt, arbeite vielleicht auch mal das oben genannte Tutorial durch. Das wird schon ne Menge helfen.