Alternative zu Timer, Alarm und Sleep

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Alternative zu Timer, Alarm und Sleep

    Hallo ich möchte gerne dass eine Aktion ein wenig wartet bis die nächste ausgeführt wird.

    Quasi, dass eine Aktion erst zu Ende ausgeführt werden soll und danach erst die nächste beginnt.

    Das Problem hierbei ist in einem Evemt ändern sich dauernd die objects, sodass es mit einem Alarm ziemlich unübersichtlich wird.

    Eine "timer" variable hochzählen zu lassen im Step Event wär auch blöd, da ich sie in jedem object neu definieren müsste.

    Bei sleep ist das Problem, dass die Aktionen einfrieren.


    Gibt es einen Alternativen Wait-Befehl, den man in einem Event einfach einbringen könnte, auch wenn die die Objekte dauernd ändern?


    Zum Beispiel:

    Set Path
    "wartebefehl"
    Change Instance
    "wartebefehl"
    Set Path
    "wartebefehl"
    Change Instance
    ....usw usw
  • Wenn du alle Aktionen (oder zumindest viele) pausieren willst, dann bräuchtest du einen Parent der für alle betreffenden Objekte gilt, in dem eine globale Variable z.B: global.wait überprüft wird.
    Wenn die Variable auf 1 ist, werden alle Aktionen im Step-Event und anderen permanenten Events nicht ausgeführt, wenn sie auf 0 ist dann schon, beispielsweise:

    obj_parent:

    if global.wait = 1
    {
    exit
    }

    und in einem Objekt, das obj_parent als Parent hat:

    Step-Event:

    event_inherited()
    (+ danach die Aktionen)

    So kann man sich, denke ich, die Überprüfung in jedem Objekt sparen.
    Das Parent Event und der Befehl event_inherited sollten aber natürlich nur in den Objekten zum Einsatz kommen, die diese Wait-Funktion auch betrifft.

    Die Wait-Funktion wird so immer dann aufgerufen, wenn die globale Variable global.wait auf 1 gesetzt ist.

    Ist dir damit geholfen?

    /Edit: Nur ein paar Kleinigkeiten korrigiert

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von RLP ()

  • ja aber so kann ich doch gar nicht zeitlich ab"timen" nach wieviel zeit ab einem bestimmenten punkt die aktionen weiter ausgeführt werden sollen ?

    läuft doch dann auch wieder auf alarme raus, was dann ziemlich unübersichtlich wird



    gibt es nicht irgendeinen sleep bei dem nichts einfriert? ^^ in anderen computersprachen gibts sowas wie loadwait oder sonstwas ^^ oder einen "nichtstu" befehl ^^


    ich sag mal noch ein beispiel:

    zum beispieelll : ein object folgt einem path, am ende des path ändert sich das object, ein text erscheint, ein object ändert sich, ein erneuter path... usw

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von abnormal ()

  • Hm ok ... aber wenn du global.wait als Zählvariable verwendest:

    Könnte man im Controller-Objekt im Step-Event die Variable runterzählen lassen ...
    Sodass wenn global.wait z.B. auf 120 gesetzt ist 2 Sekunden (bei 60 FPS) dauert bis es bei 0 ist.

    Das Step-Event des Controller-Objekts könnte dann so aussehen:

    GML-Quellcode

    1. if global.wait > 0
    2. {
    3. global.wait -= 1
    4. }


    und im obj_parent dann:

    GML-Quellcode

    1. if global.wait > 0
    2. {
    3. exit
    4. }


    /Edit: Hast du es schon mit Timelines probiert? Das wäre auch eine Möglichkeit. Dann könnte man die Position der Timeline immer entsprechend setzen.

    /Edit2: Sorry habe das falsch verstanden. Du willst offenbar eine Reihe an Aktionen in bestimmten Zeitintervallen ausführen. Timelines sind dafür wohl wirklich das einfachste.^^

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von RLP ()

  • ja eine timeline wäre auch eine lösung, die ich bis jetzt nicht in betracht gezogen habe um es übersichtlicher zu haben

    und mir die alarme oder die variablen mit if-verzweigungen zu sparen für jede aktion



    danke für den tipp RLP

    und wenn jemand eine noch effizientere lösung kennt, immer her damit ^^