pearl.de Bestseller NEU Beratungsvideo Schnäppchen Ausgezeichnet bewertet Pressestimmen Günstig beiwww.pearl.de onlne einkaufen
PC Magazin


Walter Saumweber

18. Juni 2008
Gesteuerte Handlung: Workshop: Spiele programmieren (Teil III) Bild vergrößern 937 764 http://img2.magnus.de/Spiele-programmieren-r937x763-C-a8509f74-5922863.jpg
Gesteuerte Handlung

Workshop: Spiele programmieren (Teil III)

Sobald ein Benutzer ein Eingabegerät wie Maus oder Tastatur betätigt, soll dies eine Aktion auslösen. Wie Sie so ein Verhalten codieren, erfahren Sie in diesem Beitrag.

Spiele sind weit mehr als animierte Werbebotschaften. Der Spieler will die Handlung meistern. Wie der Spieler mit seinen Maus- oder Tasteneingaben das Spiel beherrscht, programmieren Sie mit diesem Beispiel.

Lektion Inhalt
Kapitel 1 Software-Installation
Kapitel 2 Umsetzen der Spielidee
Kapitel 3 Anzeigen von Objekten
Kapitel 4 Bewegung im Spiel

Zunächst vorab: Alle Klassen, die im XNA Framework etwas mit Benutzeraktionen zu tun haben, finden Sie im Namespace Microsoft. Xna.Framework.Input. Wenn Sie für eine bestimmte Aufgabenstellung die Hilfe bemühen, was Sie regelmäßig tun sollten, stellen Sie zunächst oben in der Drop-Down-Liste des linken Frames XNA Game Studio Express ein. Erweitern Sie dann nacheinander den gleichnamigen Knoten XNA Game Studio Express, dann XNA Framework Class Library Reference und schließlich Microsoft.Xna.Framework.Input. Das XNA Framework unterstützt drei Eingabegeräte: die Tastatur, die Maus und den Xbox-360-Controller. Da Sie sich allein den Windows-PC-Spielen widmen, interessieren uns nur die ersten beiden.

Aktion per Tastatur

Auf die Tastatur greifen im XNA Framework die Klassen Keyboard und KeyboardState zu, wobei sich mehr oder weniger alles um die Klasse KeyboardState dreht. Diese repräsentiert den aktuellen Zustand der Tastatur. Die Klasse Keyboard dürfen Sie getrost als Mittel zum Zweck ansehen. Das einzige, was Sie wissen müssen, ist, dass diese Klasse die statische Methode GetState() zur Verfügung stellt. Mit dieser Methode erzeugen Sie schließlich im Code das KeyboardState-Objekt in der Form KeyboardState tastaturStatus = Keyboard.GetState();. Der Ausdruck tastaturStatus bleibt ein frei wählbarer Bezeichner für die jeweilige Instanzvariable. Über die Methoden des KeyboardState-Objekts fragen Sie anschließend den Zustand einzelner Tasten ab. Das geschieht in der Regel mit IsKey-Down und IsKeyUp. Beide Methoden liefern einen booleschen Wert zurück, der anzeigt, ob die jeweilige Taste gedrückt ist oder nicht. Die Taste, die zu überprüfen ist, übergeben Sie als Parameter vom Typ Keys. Keys ist eine Enumeration, deren Member alle verfügbaren Tasten wiedergeben. Die wichtigsten davon entnehmen Sie der Tabelle Enumeration wichtiger Tasten.

Member Taste
A [A]
F1 [F1]
Left [Pfeil links]
Right [Pfeil rechts]
Up [Pfeil oben]
Down [Pfeil unten]
Space [Leertaste]
Enter [Eingabe]
Escape [Escape]
PageUp [Seite oben]
PageDown [Seite unten]
Sleep [Pause]
Print [Druck]

Die Member B, C bis Z bezeichnen jeweils die entsprechenden Tasten, [F2], [F3], [F4] und so weiter die Funktionstasten. Eine vollständige Auflistung finden Sie in der Hilfe zum XNA Game Studio Express.

Kommen Sie nun zurück auf das Projekt GameDevelopment1. Neueinsteiger finden die aktuelle Version als ZIP-Archiv auf der Heft-DVD. Die Demonstration soll den springenden Ball auf einen Tastendruck hin abwechselnd gelb und wieder rot färben. Die benötigten Objektvariablen deklarieren Sie am besten wieder am Anfang der Game-Klasse. Außerdem brauchen Sie eine Hilfsvariable für den Farbwechsel:

Codebeispiel:

KeyboardState alterStatus;
KeyboardState neuerStatus;
private bool farbwechsel = false;

Nun werden Sie sich vielleicht fragen, warum die Abfrage eines einzigen Tastendrucks gleich zwei KeyboardState-Variablen benötigt. Die Antwort: Wenn Sie im Code auf einen Tastendruck reagieren, geschieht das ja in der Update()- und in der Draw()-Ereignismethode und zwar in genau einem Frame.

Bitte bedenken Sie, dass die Ereignismethoden Update() und Draw() genau ein Mal pro Frame ausgeführt werden. Nun kann es aber passieren – und das wird sogar die Regel sein –, dass der Spieler die Taste über mehrere Frames hinweg gedrückt hält. Und oft – wie dies hier der Fall ist – wollen Sie eine bestimmte Aktion mit dem Tastendruck nur ein Mal auslösen. Diese Aktion soll nicht in jedem Frame ablaufen, sondern genau nur in demjenigen, in welchem der Benutzer die Taste zum ersten Mal gedrückt hat. Also müssen Sie gleichzeitig feststellen, ob die Taste zuvor nicht schon gedrückt war. Zu diesem Zweck verwenden Sie hier die Variable alter-Status. Sie erhält ihren Anfangswert im Konstruktor der Game-Klasse, um den Tastaturzustand gleich zu Beginn des Spiels festzuhalten.

Spiele programmieren: Keys-Enumeration
Bild vergrößern 937 614 http://img3.magnus.de/Spiele-programmieren-Keys-Enumeration-r937x613-C-f6060210-28234133.jpg Klassendokumentation: Mit der Keys-Enumeration sprechen Sie im Code jede beliebige Taste an.

Klassendokumentation: Mit der Keys-Enumeration sprechen Sie im Code jede beliebige Taste an.

Codebeispiel:

public Game1()
{ ...
alterStatus = Keyboard.GetState();
}

Nach jedem Frame weisen Sie dieser Variable am Ende der Update()-Methode den aktuellen Zustand zu: alterStatus = neuerStatus;. Somit ist sichergestellt, dass alterStatus immer den Tastaturstatus des vorangegangenen Frames enthält. Mit der Variablen neuer-Status ermitteln Sie – ebenfalls in der Update()-Methode –, wann die Taste gedrückt wurde. Das signalisiert, wann der Farbwechsel stattfinden soll. Das Beispiel sieht hierzu die [F1]-Taste vor:

Codebeispiel:

protected override void Update
(GameTime gameTime)
{
...
move();
neuerStatus = Keyboard.GetState();
if (neuerStatus.IsKeyDown(Keys.F1)
&& alterStatus.IsKeyUp(Keys.F1))
{
farbwechsel = !farbwechsel;
}
alterStatus = neuerStatus;
base.Update(gameTime);
}

Zur Erläuterung: Da jedes Frame Update() erneut aufruft, halten Sie als Erstes den aktuellen Tastaturzustand fest: neuerStatus = Keyboard.GetState();. Danach prüfen Sie mit neuerStatus.IsKeyDown(Keys.F1), ob die [F1]-Taste gedrückt wurde, und ob sie nicht schon im alten Frame gedrückt war (alterStatus.IsKeyUp(Keys.F1)). Den Methoden IsKeyDown() und IsKeyUp() übergeben Sie dabei jeweils, wie oben beschrieben, ein Keys-Objekt mit der Eigenschaft F1 für die [F1]-Taste. Insofern beide Bedingungen zutreffen, lösen Sie im Code den Farbwechsel aus. Dazu ändern Sie den booleschen Wert der Hilfsvariablen farbwechsel. Mit Hilfe dieser Variablen ermitteln Sie dann in der Draw()-Methode, ob der Ball rot oder gelb gezeichnet werden soll. Das Beispiel GameDevelopment1_Farbwechsel.zip finden Sie als Archiv auf der Heft-DVD.

Codebeispiel:

protected override void Draw(GameTime
gameTime)
{ ...
if (farbwechsel == false)
{ spriteBatch.Draw
(mySprite, ballPos, Color.Red);
}
else
{ spriteBatch.Draw
(mySprite, ballPos, Color.Yellow);
}
...
}

Lesen Sie auf der nächsten Seite, wie Sie den Spielball mit den Pfeiltasten und der Maus bewegen.



Inhaltsverzeichnis


Verwandte Themen

Günstig bei www.pearl.de online einkaufen
Meistgelesen
1. Samsung WB750 im Test

Handling und Bedienung der Samsung WB750 gefallen außerordentlich gut. Der Direktzugriff hilft, schnell wechselnde Motivsituationen locker zu meistern.

2. Panasonic DMC-TZ25 im Test

Sie ist eine hervorragende Reisekamera. Das Modell wiegt nur ca. 200 Gramm und passt in jede Jackentasche. Sie ist mit 3,3 cm sehr flach und verfügt…

3. Kino-Kritik: Act Of Valor

Ein Film, schlimmer als ein Ego-Shooter-Spiel: Ein halbdokumentarischer Actionfilm begleitet echte Navy Seals bei der Arbeit.

4. Fujifilm Finepix F600eXr im Test

Die Finepix F600EXR gefällt aufgrund ihrer guten Ausstattung und der intelligenten Detailfunktionen.


Kleines Spiel für zwischendurch

Bildergalerien
Samsung NV24 HD Praxistest: Nokia 6230i Sport-Gadgets - ISPO 2008 Namu6 2.4

Bilder-Suche

Top 5 Downloads
1
Recuva

Version: 1.42.544
Lizenz: Freeware
Betriebssystem: Windows

2
Win7codecs

Version: 3.6.2
Lizenz: Freeware
Betriebssystem: Windows

3
OnlineTV

Version: 6.2.0.2
Lizenz: Freeware
Betriebssystem: Windows

4
CCleaner

Version: 3.18.1707
Lizenz: Freeware
Betriebssystem: Windows

5
Firefox

Version: 13.0 Beta 4
Lizenz: Open Source
Betriebssystem: WindowsLinuxMac

Download-Suche