The Second Guest
Adventure-Treff
The Second Guest
(Anzeige)






Adventure-Treff
Lost Chronicles of Zerzura
GS Code Library

Tastatursteuerung

Effekt

Der Spieler soll sein Alter Ego mit der Tastatur steuern können. So lange eine Richtungstaste gedrückt wird (egal ob die Pfeiltasten oder der Nummernblock benutzt wird und ob Num Lock eingeschaltet ist oder nicht), soll sich die Spielfigur in die entsprechende Richtung bewegen. Wird die Taste losgelassen, bleibt sie stehen.

Methode

Zunächst werden im globalen Script zur besseren Lesbarkeit einige Konstanten definiert.

// --- Konstanten für Richtungen und Laufweite
#define DIR_DISTANCE 10000
#define DIR_SW   1
#define DIR_S    2
#define DIR_SE   3
#define DIR_W    4
#define DIR_STOP 5
#define DIR_E    6
#define DIR_NW   7
#define DIR_N    8
#define DIR_NE   9
 
int PrevDirection = DIR_STOP;

Die eigentliche Funktion zur Tastatursteuerung sieht folgendermaßen aus:

function Tastatursteuerung() {
  // --- Tastatursteuerung ---
  int Direction, dx, dy;
 
  // Neue Richtung ermitteln
       if ((IsKeyPressed (371) == 1) || (IsKeyPressed (55) == 1)) Direction = DIR_NW;  
  else if ((IsKeyPressed (372) == 1) || (IsKeyPressed (56) == 1)) Direction = DIR_N;  
  else if ((IsKeyPressed (373) == 1) || (IsKeyPressed (57) == 1)) Direction = DIR_NE;  
  else if ((IsKeyPressed (375) == 1) || (IsKeyPressed (52) == 1)) Direction = DIR_W;  
  else if ((IsKeyPressed (377) == 1) || (IsKeyPressed (54) == 1)) Direction = DIR_E;  
  else if ((IsKeyPressed (379) == 1) || (IsKeyPressed (49) == 1)) Direction = DIR_SW;  
  else if ((IsKeyPressed (380) == 1) || (IsKeyPressed (50) == 1)) Direction = DIR_S;  
  else if ((IsKeyPressed (381) == 1) || (IsKeyPressed (51) == 1)) Direction = DIR_SE;  
  else Direction = DIR_STOP;
 
  // Vergleich mit aktueller Richtung
  if (PrevDirection != Direction)
  {
    PrevDirection = Direction;
    if (Direction == DIR_STOP) {StopMoving(EGO);}      // Stopp der Spielfigur
    else
    {
           if (Direction == DIR_NW) { dx = -DIR_DISTANCE; dy = -DIR_DISTANCE; }
      else if (Direction == DIR_N)  { dx = 0;             dy = -DIR_DISTANCE; }
      else if (Direction == DIR_NE) { dx = DIR_DISTANCE;  dy = -DIR_DISTANCE; }
      else if (Direction == DIR_W)  { dx = -DIR_DISTANCE; dy = 0;             }
      else if (Direction == DIR_E)  { dx = DIR_DISTANCE;  dy = 0;             }
      else if (Direction == DIR_SW) { dx = -DIR_DISTANCE; dy = DIR_DISTANCE;  }
      else if (Direction == DIR_S)  { dx = 0;             dy = DIR_DISTANCE;  }
      else if (Direction == DIR_SE) { dx = DIR_DISTANCE;  dy = DIR_DISTANCE;  }
      MoveCharacterStraight (EGO, character[EGO].x + dx, character[EGO].y + dy);
    }
  }
}

Im ersten Teil ("Neue Richtung ermitteln" wird mit der Funktion IsKeyPressed die Tastatur abgefragt, links jeweils die Richtungstasten und rechts die Zahlen (falls Num Lock gedrückt ist). Wenn dann die bisherige Richtung von der aktuell gedrückten Richtungstaste abweicht ("Vergleich mit aktueller Richtung"), dann wird mit MoveCharacterStraight die Spielerfigur bewegt. In der repeatedly_execute Funktion muss dann nur noch ständig die eben erstellte Funktion aufgerufen werden:

function repeatedly_execute() {
  Tastatursteuerung();
}

a-v-o & Jan 'DasJan' Schneider


 

 
Lost Chronicles of Zerzura

(Anzeige)


DosBox-Demo
der Woche


The Big Red Adventure
(Dynabyte)

Download (5 MB)
Lösung

Es findet im Moment keine Umfrage statt.

Amazon.de Partnerschaft

(c) 2000 - 2012 by Adventure-Treff
Alle Bilder, Sounds, Dateien und weitere Inhalte dürfen nicht ohne vorherige
Genehmigung benutzt werden. Aber wenn ihr nett fragt, bekommt ihr sie bestimmt!