Zeitsteuerung eines Ereignises mit "timer"

Das Board für Schwierigkeiten beim Adventure-Machen und zum Melden von Bugs
Post Reply
Icebaer3
An Adventure Creator
Posts: 408
Joined: 19 Dec 2012, 20:15
Location: Koblenz

Zeitsteuerung eines Ereignises mit "timer"

Post: # 81886Post Icebaer3
13 Nov 2014, 09:22

So Freunde, mal wieder was am rumprobieren, als könnte es nicht einfach mal klappen.

Einfacher Aufbau: Ich will beim laden eines Raumes einen timer von 3 Sekunden ablaufen lassen.
Wenn der zu ende ist, kommt eine Cutscene. Klappt auch soweit.

Jetzt will ich aber das dieser timer beim klick auf einen Button angehalten wird und ne andere
Cutscene abgespielt wird. Das klappt auch, ABER (!), danach spielt er die erste Cutscene
auch noch ab, da ja der timer abgelaufen ist.

Jetzt habe ich mir geholfen mit nem bool, hier mal die Skripte:

Code: Select all

Im Raumskript:

on (enter)
  {
  timer (3)
    setbool (Scene 1; true)
  }

on (loop1)
  {
  if_bool (Scene 1; true)
    cutscene (Scene 1)

Code: Select all

Auf dem Button:

on (click)
  {
  setbool (Kill; false)
  cutscene (Scene 2)
  ...
Was könnte ich hier besser machen um das zum laufen zu bringen, bzw. gibt es nen Befehl um timer zu stoppen?

Zimond
Der Engine Papa
Posts: 3420
Joined: 06 Apr 2003, 19:34
Location: Krefeld
Contact:

Re: Zeitsteuerung eines Ereignises mit "timer"

Post: # 81887Post Zimond
13 Nov 2014, 15:09

nee timer stoppen is nich vorgesehen.

Wozu ist denn der Kill Wert? Kanst du den nicht als zweite Bedingung an die erste Cutscene heften? So das sie nur ausgeführt wird wenn Cutscene 2 eben nicht läuft?
Image

Icebaer3
An Adventure Creator
Posts: 408
Joined: 19 Dec 2012, 20:15
Location: Koblenz

Re: Zeitsteuerung eines Ereignises mit "timer"

Post: # 81888Post Icebaer3
13 Nov 2014, 16:12

Der Kill wert ist nicht richtig, da hab ich mich verschrieben.

Aber ich habe ne andere Idee aus dem Forum das ich ausprobieren werde:

Ich lege den timer in eine function, die ich on(enter) starte und wenn ich
den Button klicke einfach stopfunction mache. Sollte doch gehen oder?

Probier ich nachher mal aus. Alternative Ideen sind gerne gesehen.

japanhonk
PaC-DK God
Posts: 1716
Joined: 05 Feb 2009, 20:36
Location: NRW
Contact:

Re: Zeitsteuerung eines Ereignises mit "timer"

Post: # 81889Post japanhonk
13 Nov 2014, 16:29

Auch, wenn ich mich wiederhole...

Objekte als Timer zu nutzen und über die Frames dann eine Funktion auszuführen am Ende , geht gut.

Klickt man sie an, wird der Zustand von 1 ( Zeit läuft ) auf 10 ( sofort aktuelle Funktion stoppen und per Stringvariable neu definierte Funktion starten ) gesetzt- So lassen sich komfortabel mehrere Funktionen im Vorfeld defnieren, abspielen, stoppen und wenn man dazu Variablen hochzählt, auch hintereinander weg laufen lassen....

Klickt man nicht, läuft z.B. Zustand 1 durch und springt dann auf Zustand 10, dort wird dann etwas Neues aufgerufen...


Gruss

Manni
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de

Icebaer3
An Adventure Creator
Posts: 408
Joined: 19 Dec 2012, 20:15
Location: Koblenz

Re: Zeitsteuerung eines Ereignises mit "timer"

Post: # 81890Post Icebaer3
13 Nov 2014, 18:37

Ja das hab ich schon in einem anderen Thema gelesen aber net kapiert, sorry.

Ich denke mal das ist relativ einfach, nur fehlt mir gerade der Praxisbezug.

Kannst du mal ein Beispiel machen?

japanhonk
PaC-DK God
Posts: 1716
Joined: 05 Feb 2009, 20:36
Location: NRW
Contact:

Re: Zeitsteuerung eines Ereignises mit "timer"

Post: # 81891Post japanhonk
14 Nov 2014, 19:24

Klar---

Das könnte ich, aber das Ganze geht nur in Verbindung mit ( einem Close Button ), Variablen, Strings und Funktionen. Klingt umständlich, ist aber sehr flexibel einsetzbar und nicht nur auf Texte beschränkt.

Man kann damit z.B. EIN Musikstück abspielen und dann ein Weiteres. Man muss nur seine Länge kennen
und dann z.B. ein weiteres Objekt als Timer definieren , deren Zustände solange hintereinander ablaufen, wie das Musikstück lang ist. Damit ließe sich eine Playlist abspielen.

Ich gebe ein Beispiel anhand einer bzw mehrerer Textausgaben.

-Variablen : Werden von Funktionen benötigt, sagen aus, welcher Text angezeigt werden soll.
-Strings : Sagen dem Timer, welche Funktion ( Text, Sound, Eregnis usw ) aktiviert werden soll
-Funktionen : regeln die Ausgabe von Text, Sound usw anhand von Variablen ( die regeln die Reihenfolge )

Close Button : Nur für Texte, die durchgeklickt werden können bzw weggeklickt werden können.

Wenn Du eine Textfunktion hast, kann Diese anhand von Variablen berechnen , welcher Text ausgegeben werden soll.
Der Text wird ausgegeben, die Variable verändert ( +1 bei Reihenfolgen oder feste Nummern bei Sprüngen zu anderen Passagen ) dann wird der Timer aktiviert, der läuft im gewünschten Tempo ab und aktiviert dann z.B. wieder die Textfunktion. ( bzw die Funktion, die im jeweiligen String drinsteht und im Frame des Timers ausgeführt wird )

Die Textfunktion prüft jetzt wieder die Variable und gibt den dazu passenden Text aus. Falls nichts mehr folgt, wird das Timerobjekt auf 0 gesetzt, die Funktion beendet und das letzte Textfenster bleibt solange
offen, bis der Close Button geklickt wird.

EIn Closebutton prüft, ob ein Fenster nur geschlossen werden soll ( Textnum=0) , oder ob eine ( per String definierte ) Funktion ausgegeben werden soll.
Alternativ kann auch der Closebutton die Textfunktion neu aufrufen.


Beispiel :

timer_obj Zustand 1 : 30 sek Laufzeit
timer_obj Zustand 2 : 15 sek Laufzeit

Es soll ein kurzer Text per Speech ( für 15 Sek ) ausgegeben werden, danach sollen 2 weitere Texte angezeigt werden.
Der Speech Teil kann z.B. durch Klick auf ein Objekt angezeigt werden :
die entsprechende Textpassage 1 soll die Nummer Textnum=1 haben und dann automatisch nach 30 sek auf einen Text mit der Nummer 2 schalten. Danach bleibt das Fenster offen und wartet, bis es geschlossen wird.

In Kurz :

Speech Teil, 15 Sek Wartezeit, neues Fenster , 30 Sekunden Wartezeit, neues Fenster, offen, bis geklickt wird.

Klick während der Wartezeit auf den Closebutton schliesst sofort die offenen Textfester und ruft den nächsten Text auf oder schließt das Fenster, wenn Nix mehr kommt.

on (click)
{
speech (self;Das ist eine Tür;true)
setnum (textnum;1)
setstring (textstring;textausgabe)
setobj (timer_obj;2)
break()
}

im letzten Frame jedes Zustandes des Timerobjektes "timer_obj" steht : function ([textstring])
Dieser String bestimmt die Funktion, die nach der abgelaufenen Zeit ablaufen soll.
Er muss definiert und vor dem Timerstart an den Timer übergeben werden.

Da das Objekt ( timer_obj ) oben mit 15 Sekunden ( Zustand 2 ) eingeschaltet wurde, wird die Funktion Textausgabe somit nach 15 sek aktiviert.

Funktion : TEXTAUSGABE :

hidealltext()
setobj (textfenster_klein;0)
setobj (textfenster_groß;0)
setobj (close_button;1)

If_num (textnum;1)
{
setobj (textfenster_groß;1)
textout (1; soll ich die Tür untersuchen ?...)
textout (2; Ich sehe mir das mal an......)
textout (3;...)
textout (4;...)
textout (5;...)
setnum (texttimer;+1)
setobj (timer_obj;1)
break()
}

If_num (textnum;2)
{
setobj (textfenster_klein;1)
textout (1; sie ist verschlossen, Pech gehabt.... )
textout (2;gehe ich eben woanders hin)
setnum (textnum;0)
setobj (timer_obj;0)
break()
}

im Objekt Close Button steht :

on (click)
{
ifnot_num (textnum;0)
function ([textstring])

if_num (textnum;0)
{
setobj (textfenster_klein;0)
setobj (textfenster_groß;0)
hidealltext()
setobj (timer_obj;0)
setobj (close_button;0)
}

}

Wenn jetzt die Textvariablen verändert werden, kann jeder Text damit zu jeder Zeit angesprungen werden.
Das setzt voraus, dass ich weiß, wo die Texte stehen und welche Nummer sie haben.

Ich habe z.B. je eine Funktion pro Figur, die alle ihre Texte enthält.
In einem weiteren Teil der Serie habe ich nur eine große Textfunktion benutzt, dort stehen alle Dialoge
und Aussagen des Spiels drin.

Hoffe, dass Dir das nützt.


Gruß

Manni
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de

Icebaer3
An Adventure Creator
Posts: 408
Joined: 19 Dec 2012, 20:15
Location: Koblenz

Re: Zeitsteuerung eines Ereignises mit "timer"

Post: # 81893Post Icebaer3
15 Nov 2014, 12:34

Das war wie gewohnt sehr ausführlich und ich danke dir dafür.

Mein Problem habe ich im übrigen durch die entsprechende function gelöst, klappt wunderbar.
Habe dann aber den timer einfach durch wait ersetzt.

Was deine Abhandlung angeht habe ich den Gedanken dahinter verstanden, allerdings merke ich auch, dass dies einiges an Vorabeiten bedeutet.
Im kleinen habe ich das auch schon gemacht mit mehreren Variablen die dann irgendwelche Texte ausgeben, aber noch nicht auf solch hohem Niveau.
Na ich stehe ja auch noch am Anfang. Ich merke gerade, dass war dann doch :slime: , aber ich stehe dazu.

Für den Moment werde ich jetzt mal die weitere Umsetzung angehen und plane dann eine Demo Veröffentlichung hier.
Aber ich lasse das Thema mal für später noch offen.

Post Reply