Frage zum Öffnen/Schließen bei Türen

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Benutzeravatar
Cyrus
Komplettlösungsnutzer
Komplettlösungsnutzer
Beiträge: 19
Registriert: 04.07.2004, 18:16
Wohnort: Hessen
Kontaktdaten:

Frage zum Öffnen/Schließen bei Türen

Beitrag von Cyrus »

Hi,
Ich habe in einem Raum eine Tür, die man mit einem Schalter öffnen kann, wenn man diesen benutzt. Ich verwende das default GUI.
Das mit dem Öffnen klappt gut:

Code: Alles auswählen

SetObjectView (0,4);
AnimateObject(0,0,0,0);
Aber die Tür soll sich wieder schließen, wenn man ein weiteres Mal auf den Schalter drückt. Es soll also die Schließanimation abgespielt werden.
Wie mache ich dies?

Danke im Voraus :)
[ZENSIERT]

Beitrag von [ZENSIERT] »

Geht auch so:

Code: Alles auswählen

SetObjectImage(0, 1);
und zum Schließen:

Code: Alles auswählen

SetObjectImage(0, 0);
Zu den Walkable areas ist irgendwo hier noch ein Artikel
Benutzeravatar
Cyrus
Komplettlösungsnutzer
Komplettlösungsnutzer
Beiträge: 19
Registriert: 04.07.2004, 18:16
Wohnort: Hessen
Kontaktdaten:

Beitrag von Cyrus »

Naja, das hat mir nicht wirklich geholfen. Aber ich bin dann nach ein bisschen überlegen selbst drauf gekommen, trotzdem danke.

Code: Alles auswählen

// room script file
int door_open;

...

  // script for hotspot2: Interact hotspot
if (door_open == 0) {
  SetObjectView (0,4);
  AnimateObject(0,0,0,0);
  RestoreWalkableArea(2);
  }
if (door_open == 1) {
  SetObjectView (0,6);
  AnimateObject(0,0,0,0);
  RemoveWalkableArea(2);
  door_open = 0;
  }
if (door_open < 1) {
  door_open += 1;
  }
}

Die Tür geht jetzt auf, wenn man den Schalter einmal klickt, und wieder zu, beim zweiten Klick. Das Problem ist nur, sie dann beim dritten Klick wieder aufzubekommen, also door_open wieder auf 0 zurückzusetzen.
So wie ich es machen wollte funktioniert es nicht:

Code: Alles auswählen

if (door_open == 1) {
  door_open = 0;
  }
Weiß jemand Rat?

mfg,
Cyrus
Benutzeravatar
Rocco
Adventure-Treff
Adventure-Treff
Beiträge: 1019
Registriert: 25.11.2003, 16:20
Wohnort: Ronville
Kontaktdaten:

Beitrag von Rocco »

in diesem fall wäre es so, dass im Hintergrundbild die Türe geschlossen ist,
die geöffnete Türe ein darüberglegtes Bild -> Objekt Standarmässig auf unsichtbar mit objektnummer 1.



das gehört am anfang vom roomfile
[ags]
// room script file
int doorstate = 1; // tür offen oder zu
RemoveWalkableArea(1); // the Door walkable areas


das wäre die funktion für das objekt schalter

function object3_a() {

if(doorstate%2) // wenn doorstate ungerade
{
ObjectOn(1);
PlaySound(10); // Sound Türknarren
RestoreWalkableArea(1); // Bereich ist jetzt begehbar, weil türe offen
DisplaySpeech(SYD,"Ich kann die Türe öffnen.");
}
else
{
ObjectOff(1);
PlaySound(10); // Sound Türknarren
RemoveWalkableArea(1); // Bereich ist jetzt nicht begehbar, weil türe zu
DisplaySpeech(SYD, "... und schliessen.");
}
doorstate++;
}

}
[/ags ]
müsste eigentlich gehen, hab es so nicht ausprobiert, könnte vielleicht sein dass du so probleme mit den walkable areas bekommst.
Zuletzt geändert von Rocco am 13.07.2004, 19:48, insgesamt 1-mal geändert.
Benutzeravatar
Rocco
Adventure-Treff
Adventure-Treff
Beiträge: 1019
Registriert: 25.11.2003, 16:20
Wohnort: Ronville
Kontaktdaten:

Beitrag von Rocco »

Die Tür geht jetzt auf, wenn man den Schalter einmal klickt, und wieder zu, beim zweiten Klick. Das Problem ist nur, sie dann beim dritten Klick wieder aufzubekommen, also door_open wieder auf 0 zurückzusetzen.
So wie ich es machen wollte funktioniert es nicht:

Code: Alles auswählen

if (door_open == 1) {
  door_open = 0;
  }
Weiß jemand Rat?


if (door_open == 1) {
SetObjectView (0,6);
AnimateObject(0,0,0,0);
RemoveWalkableArea(2);
door_open = 0; hier sagst du door_open ist 0
}
if (door_open < 1) { und hier sagst du wenn door_open 0 dann mach 1, damit bist du immer bei 1
door_open += 1;
}
}

mit if wird immer versucht auszuführen, ist hier nicht notwendig

Lösung 1:
// script for hotspot2: Interact hotspot
if (door_open == 0) {
SetObjectView (0,4);
AnimateObject(0,0,0,0);
RestoreWalkableArea(2);
door_open = 1;
}
else (door_open == 1) {
SetObjectView (0,6);
AnimateObject(0,0,0,0);
RemoveWalkableArea(2);
door_open = 0;
}
}




Lösung 2

siehe mein voriges posting mit den modulo-operator %
Benutzeravatar
Cyrus
Komplettlösungsnutzer
Komplettlösungsnutzer
Beiträge: 19
Registriert: 04.07.2004, 18:16
Wohnort: Hessen
Kontaktdaten:

Beitrag von Cyrus »

Danke für die Tipps. Ich hab deinen ersten Ratschlag befolgt. Eigentlich simple Lösung, hätte ich eigentlich auch selbst drauf kommen müssen ;). Naja, aus Fehlern lernt man :D
Antworten