1 Frage

Fragen zu "Adventure Game Studio"? Hier rein!
Antworten
Kleiner Looser

1 Frage

Beitrag von Kleiner Looser »

Ich möchte im meinem Spiel einen Raum machen, in dem Wasser reinläuft und wo das Wasser immer höher steigt. Wenn das Wasser so hoch ist, dass der Charakter unter Wasser steht soll man verlieren, so dass man nur eine bstimmte Zeit hat die Rätsel zu lösen. Wie kann ich das machen?
Nicki

Beitrag von Nicki »

Hi,

das ist ein ziemlich fortgeschrittenes Problem, dafür gibt es keine Patentlösung. Wenn du sonst schon alles fertig hast, kennst du dich mit den ganzen Befehlen ja schon aus, da muß man nur ein bisschen kreativ sein.

Ich schlage vor das Wasser als Objekt einzufügen, am besten mit animierten Oberfläche, oder gleich alles animieren, je nachdem wie gut es aussehen soll; und Pixelreihe um Pixelreihe nach oben zu bewegen. Etwas wie:

MoveObjectDirect (5, 10, 180, 3);
Wait(120);
MoveObjectDirect (5, 10, 179, 3);
Wait(120);

Ausrechnen wann es dir zu hoch ist und in einer anderen Raumfunktion:

Wait (2400);
GUIOn(TODESNACHRICHT);

Mehr geben meine bescheidenen Fähigkeiten nicht her. ;)
Benutzeravatar
Rocco
Adventure-Treff
Adventure-Treff
Beiträge: 1019
Registriert: 25.11.2003, 16:20
Wohnort: Ronville
Kontaktdaten:

Beitrag von Rocco »

eine andere möglichkeit wäre es, das timing mit den timer-funktionen zu steuern und 5 backgroundbilder mit unterschiedlichen wasserständen einzublenden.
aber eleganter wäre auf jeden fall, so wie es nicki beschreibt mit einem transparenten objekt den wasserstand höher steigen zu lassen, allerdings weiss ich nicht ob das so funktioniert.

hier eine ungetestete schleife für nickis beispiel
1 sec = 40 ticks also 5 sec sind 200.

starttime = GetRawTime();
todestime = ?????
starthoehe = 180;

while((GetRawTime() - starttime) < todestime)
{

MoveObjectDirect (5, 10, starthoehe++,3);
}

oder
SetTimer(1,1000);
while(IsTimerExpired(1) == 0)
{
MoveObjectDirect (5, 10, starthoehe++,3);
}

oder im repeatly execut teil eine intervall-funktion

starttime = GetRawTime();
starthoehe = 180;
if(starthoehe < 250)
if((startime%10) == 0) // Das funktioniert erst ab version 2.6 beta1
MoveObjectDirect (5, 10, starthoehe++,3);


bitte nicht schlagen,wenn das so nicht 1zu 1 funktioniert, hab es nicht ausprobiert
EDIT: Das mit den while-schleifen ist in diesem fall, glaub ich keine so gute idee, weil der spieler währendessen nicht eingreifen kann.
a-v-o
Süßwasserpirat
Süßwasserpirat
Beiträge: 258
Registriert: 22.09.2002, 21:28
Kontaktdaten:

Beitrag von a-v-o »

Noch ein Vorschlag zur Steuerung eines Wasserstands-Objekts:

in der interaction, die den Wassereinlauf startet:
SetObjectPosition (0, 0, 200);
ObjectOn (0);
// eventuell:
// SetObjectView (0, 5)
// AnimateObject (0, 0, 0, 1);
MoveObjectDirect (0, 0, 100, 3);

in repeatedly_execute:
if (IsObjectMoving (0) == 0)
{
// Wasserstand ist zu hoch
// Character stirbt
}

in der interaction, die den Wassereinlauf stoppt:
StopObjectMoving (0);

Zu beachten ist, dass grosse Objekte den Spielablauf verlangsamen können.
Sharalamude

Beitrag von Sharalamude »

Jetzt kann er sich garnicht mehr ednscheiden^^
a-v-o
Süßwasserpirat
Süßwasserpirat
Beiträge: 258
Registriert: 22.09.2002, 21:28
Kontaktdaten:

Beitrag von a-v-o »

ist doch ganz einfach: im Zweifelsfall immer MEIN Script verwenden

(wie sonst sollte ich in die Credits aller möglichen und unmöglichen Spiele kommen?) :P
Antworten