1 Frage
1 Frage
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?
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. ;)
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. ;)
- Rocco
- Adventure-Treff
- Beiträge: 1019
- Registriert: 25.11.2003, 16:20
- Wohnort: Ronville
- Kontaktdaten:
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.
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.
-
- Süßwasserpirat
- Beiträge: 258
- Registriert: 22.09.2002, 21:28
- Kontaktdaten:
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.
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.
-
- Süßwasserpirat
- Beiträge: 258
- Registriert: 22.09.2002, 21:28
- Kontaktdaten: