Hallo! Ich bin es mal wieder. Ich sitze schon seit Wochen an einem (neuen) Projekt und hatte bis jetzt auch noch keine Probleme....bis jetzt.
Ich habe mir gedacht: "Bau mal eine lustige Aufgabe unter Zeitdruck ein" Man soll einen Stock nehmen, ihn anzünden und nach 30 Sekunden soll er wieder ausgehen ( weil es im Raum regnet). Das hat auch alles super funktioniert.
Ich habe eine rekursive Funktion gebaut, die so aussieht:
setnum(sekunden;-1)
wait (1)
ifnot_num(sekunden;<1)
function(Stabzahl)
setnum(sekunden;31)
cutscene(Stabaus)
(Natürlich habe ich vorher "sekunden" auf 31 gestellt)
"Stabaus" sieht so aus:
delitem(self;Stab_geg_feuer)
additem(self;Stab_geg)
speech(self;Der Stab ist ausgegangen...So ein mist!)
Das Problem ist, dass beim Verlassen des Raumes auf einmal "Stabaus"
aktiviert wird, bevor die Zeit abgelaufen ist....("sekunden" läuft trotzdem weiter)
Ich hoffe mir kann jemand helfen das Problem zu lösen...
Funktion spinnt?
Funktion spinnt?
Musik von DJ Frath (mir) gibt's hier: http://soundcloud.com/djfrath
eine loopende Funktion ruft man auf mit :
function (stab ; inf)
in der Funktion dann :
wesentlich simpler wäre es aber :
timer (30)
cutscene (stabaus)
in die cutscene stabaus kannst du dann noch am anfang etwas einfügen wie :
if_num (feuergenutzt ; 99)
break()
Für den Fall das man den brennenden Stab rechtzeitig benutzt hat und er schon weg ist. Ansonsten musst du auch hier an der Stelle dafür sorgen das die Funktion gestoppt wird wenn der Spieler den Stab rechtzeitig benutzt.
function (stab ; inf)
in der Funktion dann :
Code: Select all
setnum(sekunden;-1)
wait (1)
if_num(sekunden; 0)
{
setnum(sekunden;31)
cutscene(Stabaus)
stopfunction (stab)
}
wesentlich simpler wäre es aber :
timer (30)
cutscene (stabaus)
in die cutscene stabaus kannst du dann noch am anfang etwas einfügen wie :
if_num (feuergenutzt ; 99)
break()
Für den Fall das man den brennenden Stab rechtzeitig benutzt hat und er schon weg ist. Ansonsten musst du auch hier an der Stelle dafür sorgen das die Funktion gestoppt wird wenn der Spieler den Stab rechtzeitig benutzt.
Danke für die schnelle Antwort!
Gut, es war mir klar, dass es eine elegantere Lösung für die Funktion gibt.
Ich wollte auch erst einen Timer benutzen, allerdings habe ich folgendes im Gegenstandsskript des brennenden Stocks:
on (look)
speech(self;Der Stab brennt noch [sekunden] Sekunden)
Deswegen habe ich auf einen Timer verzichtet, da man, soviel ich weiß, nicht einzelne "Timerschritte" als Variablen ausgeben kann.
Allerdings besteht das Problem weiterhin: Wenn ich in einen anderen Raum gehe (z.B: Eine dunkle Höhle, wo man den Stock in eine Halterung geben soll) wird, kurz nachdem ich die Höhle betrete, "Stabaus" aktiviert.
Woran könnte das liegen?
By the way: Wenn ich den, auf mysteriöse Weise nun ausgegangenen, Stock wieder "entzünde" und in die Höhle (oder einen anderen Raum) gehe, wird "Stabaus" NICHT mehr aktiviert: Es funktioniert also, aber erst beim zweiten Entzünden...Sachen gibt's.
Gut, es war mir klar, dass es eine elegantere Lösung für die Funktion gibt.
Ich wollte auch erst einen Timer benutzen, allerdings habe ich folgendes im Gegenstandsskript des brennenden Stocks:
on (look)
speech(self;Der Stab brennt noch [sekunden] Sekunden)
Deswegen habe ich auf einen Timer verzichtet, da man, soviel ich weiß, nicht einzelne "Timerschritte" als Variablen ausgeben kann.
Allerdings besteht das Problem weiterhin: Wenn ich in einen anderen Raum gehe (z.B: Eine dunkle Höhle, wo man den Stock in eine Halterung geben soll) wird, kurz nachdem ich die Höhle betrete, "Stabaus" aktiviert.
Woran könnte das liegen?
By the way: Wenn ich den, auf mysteriöse Weise nun ausgegangenen, Stock wieder "entzünde" und in die Höhle (oder einen anderen Raum) gehe, wird "Stabaus" NICHT mehr aktiviert: Es funktioniert also, aber erst beim zweiten Entzünden...Sachen gibt's.
Musik von DJ Frath (mir) gibt's hier: http://soundcloud.com/djfrath
Oh...moment...hat sich erledigt! Es funktioniert! Juhu!
Trotzdem eine Frage: Kann man "Timerschritte" irgendwie als Variablen ausgeben lassen?
Trotzdem eine Frage: Kann man "Timerschritte" irgendwie als Variablen ausgeben lassen?
Musik von DJ Frath (mir) gibt's hier: http://soundcloud.com/djfrath
nein direkt nicht, nur halt durch den Umweg den du ja schon gemacht hast. Gameplayfrage nebenher : Woher soll die Spielfigur genau wissen wieviel Sekunden der stab noch brennt? Nicht das das technisch falsch wäre erscheint mir nur etwas merkwürdig. Besser fände ich ungefähre Angaben basierend auf die Sekunden z.B
Code: Select all
if_num (sekunden ; <6)
speech (self ; Du solltest dich beeilen, das Ding brennt nicht mehr lange.)
if_num (sekunden ; >5)
if_num (sekunden ; <15)
speech (self ; Noch brennts aber ein Ende ist schon in Sicht)
Zimond wrote: Woher soll die Spielfigur genau wissen wieviel Sekunden der stab noch brennt?
Äh...ähm...gute Frage. Das habe ich mir gar nicht überlegt...Ich wollte das Spiel benutzerfreundlich und nachvollziehbar gestallten, dabei ist der Realismus wohl irgendwie auf der Strecke geblieben...
Naja, man könnte es ja auch als eine Anspielung auf andere Spiele sehen, wo ein Countdown eingeblendet wird, obwohl man garnicht wissen kann, wie lange eine Tür o.ä. offen bleibt..*rausred*
Vielen Dank für deine Tipps und Hinweise!
Musik von DJ Frath (mir) gibt's hier: http://soundcloud.com/djfrath
Dazu möchte ich gerne zweierlei Dinge anmerken. Also zunächst musst du trennen zwischen dem Wissen des Spielcharakters und dem, was der Spieler weiß. Es ist zwar möglich, den Spieler das Spiel praktisch durch die Augen des Charakters zu spielen, um mehr Spannung zu erzeugen. Meistens weiß der Spieler aber mehr als die Figur, die er da steuert (alleine wenn man bedenkt, dass man einen gebailten Abschnitt neu laden kann, wovon die Spielfigur keinen Schimmer hat). Das heißt, du kannst einen Counter für den Spieler einbauen, obwohl die Spielfigur nicht weiß, wie lange noch Zeit bleibt.
Außerdem ist es aus meiner Sicht nur bedingt ratsam, Realismus in einem Spiel durchzusetzen. Du kannst entweder ein realistisches Spiel machen (dann bist du beim Genre der Simulation) - oder ein spielerfreundliches. Die Realität macht nämlich häufig weniger Spaß als das Spiel, in dem der Spieler die gewohnten Grenzen überschreiten kann. Das ist auch der Grund, wieso Spiele überhaupt gespielt werden. Natürlich gibt es aber Ausnahmen, wo das Spielerlebnis nie an die Realität heranreichen kann (gerade im Bereich Sport, oder bei einem guten Essen oder Sex ). Ich rate dir, bei der Spielplanung den Spielspaß als primäres Augenmerk zu verfolgen, aber noch ein Mindestmaß an Realismus beizubehalten, damit das Ganze glaubhaft bleibt, gerade bei Adventures, die in unserer Welt und Zeit angesiedelt sind.
Außerdem ist es aus meiner Sicht nur bedingt ratsam, Realismus in einem Spiel durchzusetzen. Du kannst entweder ein realistisches Spiel machen (dann bist du beim Genre der Simulation) - oder ein spielerfreundliches. Die Realität macht nämlich häufig weniger Spaß als das Spiel, in dem der Spieler die gewohnten Grenzen überschreiten kann. Das ist auch der Grund, wieso Spiele überhaupt gespielt werden. Natürlich gibt es aber Ausnahmen, wo das Spielerlebnis nie an die Realität heranreichen kann (gerade im Bereich Sport, oder bei einem guten Essen oder Sex ). Ich rate dir, bei der Spielplanung den Spielspaß als primäres Augenmerk zu verfolgen, aber noch ein Mindestmaß an Realismus beizubehalten, damit das Ganze glaubhaft bleibt, gerade bei Adventures, die in unserer Welt und Zeit angesiedelt sind.