Tasten
-
- Süßwasserpirat
- Beiträge: 258
- Registriert: 22.09.2002, 21:28
- Kontaktdaten:
Die Funktion on_key_press wird nur aufgerufen, wenn eine Taste gedrückt wird, aber nicht wenn sie gedrückt gehalten wird, ausser die Tastenwiederholung der Tastatur setzt ein und erzeugt immer wieder einen Tastendruck, dann wird on_key_press regelmäßig aufgerufen.
IsKeyPressed kann in jeder Funktion verwendet werden nicht nur in on_key_press, um zu überprüfen, ob eine Taste gerade gedrückt gehalten wird.
Möchtest du die Aktion also nicht in Abhängigkeit von der Tastenwiederholung starten, dann kannst du IsKeyPressed bspw. in der repeatedly_execute verwenden. Dann wird in jedem game loop geprüft, ob die Taste gedrückt gehalten wird.
IsKeyPressed kann in jeder Funktion verwendet werden nicht nur in on_key_press, um zu überprüfen, ob eine Taste gerade gedrückt gehalten wird.
Möchtest du die Aktion also nicht in Abhängigkeit von der Tastenwiederholung starten, dann kannst du IsKeyPressed bspw. in der repeatedly_execute verwenden. Dann wird in jedem game loop geprüft, ob die Taste gedrückt gehalten wird.
-
- Süßwasserpirat
- Beiträge: 258
- Registriert: 22.09.2002, 21:28
- Kontaktdaten:
Für die Steuerung des Player-Characters per Tastatur (statt mit Mausklick) sind schon Scripts entwickelt worden. Eines davon findest du bspw. unter
ftp://a-v-o.selfhost.de/ags/keyboardcontrol.txt
Das Problem ist nicht die Funktion IsKeyPressed, sondern der MoveCharacter-Befehl. In der repeatedly_execute wird der Befehl in jedem game loop aufgerufen, solange eine Taste gedrückt gehalten wird. Das hat zur Folge, dass sich der Character nicht bewegt.
Wie in diesem Fall deutlich wird, ist die Fehlerursache bisweilen woanders zu suchen als vermutet. Daher solltest du genau beschreiben, was du erreichen willst, ansonsten kann die Hilfestellung nicht weiterhelfen.
ftp://a-v-o.selfhost.de/ags/keyboardcontrol.txt
Das Problem ist nicht die Funktion IsKeyPressed, sondern der MoveCharacter-Befehl. In der repeatedly_execute wird der Befehl in jedem game loop aufgerufen, solange eine Taste gedrückt gehalten wird. Das hat zur Folge, dass sich der Character nicht bewegt.
Wie in diesem Fall deutlich wird, ist die Fehlerursache bisweilen woanders zu suchen als vermutet. Daher solltest du genau beschreiben, was du erreichen willst, ansonsten kann die Hilfestellung nicht weiterhelfen.
-
- Süßwasserpirat
- Beiträge: 258
- Registriert: 22.09.2002, 21:28
- Kontaktdaten:
Du willst also, dass der Character beim Tastendruck nach oben springt und solange der Spieler die Taste gedrückt hält, soll der Character immer weiter springen!?
// GlobalInt
#define GI_SPRUNG_Y 5
// --- repeatedly_execute ---
int sprung_y = GetGlobalInt (GI_SPRUNG_Y);
if (IsKeyPressed(372) == 1)
{
// Taste ist gedrückt
if (sprung_y < 0)
{
// es findet gerade kein Sprung statt, also neuen Sprung starten
sprung_y = character [EGO].y - 80;
SetGlobalInt (GI_SPRUNG_Y, sprung_y);
MoveCharacterDirect (EGO, character[EGO].x, sprung_y);
}
}
if (character [EGO].y <= sprung_y)
{
// Sprung ist beendet
// die folgende Zeile sollte auch in game_start kopiert werden:
SetGlobalInt (GI_SPRUNG_Y, -1);
}
// GlobalInt
#define GI_SPRUNG_Y 5
// --- repeatedly_execute ---
int sprung_y = GetGlobalInt (GI_SPRUNG_Y);
if (IsKeyPressed(372) == 1)
{
// Taste ist gedrückt
if (sprung_y < 0)
{
// es findet gerade kein Sprung statt, also neuen Sprung starten
sprung_y = character [EGO].y - 80;
SetGlobalInt (GI_SPRUNG_Y, sprung_y);
MoveCharacterDirect (EGO, character[EGO].x, sprung_y);
}
}
if (character [EGO].y <= sprung_y)
{
// Sprung ist beendet
// die folgende Zeile sollte auch in game_start kopiert werden:
SetGlobalInt (GI_SPRUNG_Y, -1);
}
-
- Süßwasserpirat
- Beiträge: 258
- Registriert: 22.09.2002, 21:28
- Kontaktdaten:
Also, wenn es so Jump-And-Run-mäßig sein soll, dann kann ich dir empfehlen, dir das Platformerius-Tutorial anzuschauen. Dort sind unter anderem Sprünge bspw. auch mit Salto zu sehen:
http://user.tninet.se/~vqb114l/ilb/tutorials/ptni.htm
Vielleicht kannst du ja noch mehr von dem Script brauchen.
http://user.tninet.se/~vqb114l/ilb/tutorials/ptni.htm
Vielleicht kannst du ja noch mehr von dem Script brauchen.
-
- Komplettlösungsnutzer
- Beiträge: 10
- Registriert: 06.08.2006, 15:01
- Wohnort: Köln
wie kann man das Tastatursteuerungsscript
der Version ab 2.7 anpassen?
Wenn man sie so übernimmt kommt die Meldung
// --- 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;
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);
}
}
}
der Version ab 2.7 anpassen?
Wenn man sie so übernimmt kommt die Meldung
variable "Direction" is already defined
-
- Komplettlösungsnutzer
- Beiträge: 10
- Registriert: 06.08.2006, 15:01
- Wohnort: Köln
-
- Komplettlösungsnutzer
- Beiträge: 10
- Registriert: 06.08.2006, 15:01
- Wohnort: Köln