| |||
In der nun folgenden Sektion werden alle wichtigen Möglichkeiten besprochen, die Eingaben des Spielers von Tastatur, Maus und Joystick zu verarbeiten. Dabei wird die Kenntnis der Grafikbefehle vorausgesetzt, da wir die Effekte unserer Steuerbemühungen durch Grafiken auf dem Bildschirm sichtbar machen werden. Als allererstes ist es wichtig zu wissen, was die Tastatur Scancodes sind. Jede Taste auf der Tastatur hat eine Nummer die sie an den Computer weitergibt wenn die Taste gedrückt wird. Eine Übersicht dieser Codes findet sich in Anhang 3.B. Wann immer man wissen möchte, ob eine Taste gedrückt ist oder nicht, benötigt man diesen Code. Die wichtigsten, wie Cursortasten (Pfeiltasten), Escape, Enter und Space sollte man auswendig können. Doch kommen wir gleich zu unserem ersten Beispiel: Global PosY, PosX Global Ende Graphics 640, 480, 16, 1 SetBuffer BackBuffer() Color 255,255,255 While Ende = 0 Color 0,0,0 Rect 0,0,639,479,1 If KeyDown(1) Then Ende = 1 If KeyDown(200) Then PosY = PosY – 1 If KeyDown(208) Then PosY = PosY +1 If KeyDown(203) Then PosX = PosX – 1 If KeyDown(205) Then PosX = PosX + 1 If PosY > 460 Then PosY = 460 If PosY < 20 Then PosY = 20 If PosX > 620 Then PosX = 620 If PosX < 20 Then PosX = 20 Color 255,255,255 Line PosX – 10, PosY, PosX + 10, PosY Line PosX, PosY – 10, PosX, PosY + 10 Flip Wend Dieses etwas längere Programm setzt ein Zielkreuz - gemalt mit Linien - auf den Bildschirm, und erlaubt dem Benutzer dieses Kreuz mit der Tastatur zu bewegen. Außerdem werden Grenzen für die Bewegung des Zielkreuzes festgelegt. Mit der Befehlszeile If KeyDown(xyz) Then prüft man ob die Taste xyz gedrückt ist oder nicht. Ist die Taste gedrückt, so wird alles ausgeführt was hinter dem Then steht. Für einige mag diese Schreibweise etwas ungewöhnlich sein, statt dessen könnte man auch länger schreiben: If KeyDown(xyz) = 1 Then … KeyDown ist eine Funktion, die 1 zurück gibt wenn die Taste gedrückt ist und 0 wenn sie nicht gedrückt ist. Da 1 aber gleich dem Wahrheitswert wahr ist, kann man den Vergleich KeyDown(xyz) = 1 abkürzen. Das = 1 kann einfach weggelassen werden, den der Vergleich KeyDown(xyz) = 1 gibt 1 zurück. Wenn KeyDown(xyz) = 1 ist, gibt KeyDown(xyz) auch 1 zurück. Also kann man den Vergleich = 1 weglassen. Nicht verstanden? Macht nichts - wer besser mit KeyDown(xyz) = 1 zurecht kommt kann das gerne machen oder einfach akzeptieren, dass es anders auch geht. Ein weiterer recht wichtiger Befehl, der sehr ähnlich wie KeyDown funktioniert, ist KeyHit. KeyHit gibt nicht 1 zurück wenn die Taste gedrückt ist, sondern gibt beim Aufruf für eine Taste zurück wie oft diese gedrückt wurde seit dem das letzte mal KeyHit für diese Taste aufgerufen wurde. Für eine Spielsteuerung ist dieser Befehl daher nicht geeignet, aber für einmalige Bestätigung schon. In unserem nächsten Beispiel wird die Leertaste verwendet um zu schießen. Da wir aber nicht wollen, dass man die Taste einfach gedrückt halten kann um mehrfach zu feuern, verwenden wir KeyHit statt KeyDown. Um ein zweites mal zu feuern muss der Spieler noch ein zweites mal die Taste drücken. Das Beispiel „Tastatur 2.bb“ erläutert dies genauer. Mit diesem Beispiel werden wir jetzt weiter arbeiten, denn nun fügen wir noch weitere Steuerelemente hinzu: Maus und Joystick. Dazu wird zum einen eine Variable hinzugefügt, in der die verwendete Steuerung gespeichert ist. Sie heißt Modus. Hat Modus den Wert 1 wird die Tastatur verwendet, bei 2 die Maus und bei 3 der Joystick. Für die Maus füge ich einfach die Befehle PosY() = MouseY() PosX() = MouseX() hinzu. Diese Befehle setzten in jedem Frame das Zielkreuz auf die Position der Maus. Außerdem verwende ich die Maustaste zum feuern. MouseHit(1) funktioniert wie KeyHit(xyz), allerdings für die erste (linke) Maustaste. Für den Joystick verwende ich PosY = PosY + JoyYDir() PosX = PosX + JoyXDir() Diese Befehle addieren zu Position des Zielkreuzes die Richtung in die der Joystick gedrückt wird. Diese Richtung ist in X-Richtung –1 für links und +1 für rechts. In Y-Richtung –1 für nach oben und +1 für nach unten. Und ich verwende JoyHit(1) statt MouseHit(1) da man ja nicht mit der Maus sondern mit dem Joystick schießen soll. Nun haben wir alle drei Steuerelemente eingebaut und können sie auch wahlweise einstellen. Durch die Variable Modus in dem Programm kann man die Steuerung auf Joystick, Tastatur oder Maus stellen (Bei einem Zielscheibenspiel ist die Maus zu empfehlen). Nun füge ich dem Programm noch ein paar kleine Änderungen hinzu, und wir haben schon unser erstes Spiel! Es müssen die Fässer abgeschossen werden. Fallen mehr als 10 nach unten durch, so hat man verloren. Für jedes Fass gibt es 10 Punkte. Sicher, ein ziemlich simples Spiel und nicht mal so gut wie Moorhuhn, aber schon ein Anfang. Zum Abschluss noch etwas einfacheres. Der Befehl GetKey() prüft ob eine Taste gedrückt wurde, und gibt falls das der Fall ist, den ASCII-Code der Taste zurück. Für eine Spielsteuerung ist dieser Befehl zwar nicht geeignet, da es ja auch möglich sein soll mehrere Tasten auf einmal zu drücken, doch dieser Befehl ist sehr gut geeignet um ein Eingabefeld für Namen zu erzeugen. Viele Leute verwenden für so etwas gerne Input, doch mit etwas Umstand geht es auch mit GetKey(). Das hört sich jetzt etwas unvorteilhaft an, ist aber wesentlich professioneller, da GetKey() flexibel angepasst werden kann wie unser Beispiel zeigt. Jeder, der eine Alternative zu Input haben möchte, sollte sich daher einmal das Programm „Tastatur 5.bb“ ansehen. Weiter mit Teil 4... Quelle: www.BlitzBasic.de |