In welcher Reihenfolge aktivieren sich Events?

    • Offizieller Beitrag

    Ich bin manchmal auf Situationen gestoßen, die wieder alles in zweifel bringen.


    Diese BP habe ich erstellt und die wird auch in richtiger Reihenfolge abgespielt. Event 1 wird abgespielt und Event 2 Wird erst abgespielt, wenn Event 1 fertig ist.


    In diesem Beispiel, wird es plötzlich andersrum. Man kann erkennen, Delay bricht die Kette ab und erstellt an schein seine eigene BP. folgendes geschieht: Zuerst kommt die Zwei, dann die Eins.


    Es gibt leider auch ein paar andere Funktionen, die diese Reihenfolge unterbrechen. Man muss ganz schön aufpassen. Aber ansonsten liege ich doch richtig, dass das Event 1 abgespielt wird, bis es sein Ende erreicht hat und dann erst Event 2 abgespielt wird?

    • Offizieller Beitrag

    Mit dieser Antwort komme ich aber nicht weit. Sollte man nicht auch begründen, warum du nein meinst? Meine Begründung für Ja ist, weil man es nachweisen kann. Was ich aber nicht nachweisen kann, ob das so vorgesehen war, dass alle Events hintereinander abgespielt werden.


    Es werden sogar Events nach dem Events abgespielt und Event 2 Muss warten. Nur ein Delay hebt alles auf, was ich sogar irgendwie doof finde.


  • Aber ansonsten liege ich doch richtig, dass das Event 1 abgespielt wird, bis es sein Ende erreicht hat und dann erst Event 2 abgespielt wird?

    Dazu ein klares nein. Wie du selbst schreibst, hat dein Satz eine Bedingung. Wenn/Dann. Diese Bedinung muss programmiert werden, was nicht der Fall ist, dein Ergebnis tritt nur durch das Delay ein. Also immernoch "Nein" zu diese Aussage. Es wird immer alles abgefeuert. Da wird auf nichts gewartet, wenn du das willst, dann musst du es programmieren. Kannst du an einer Sequence alles mögliche testen.


    Spiel einfach zwei Sounds ab. Da wird nur für einen theoretischen Tick "gewartet" aber tatsächlich wird alles abgefeuert. Der wartet nicht erst bis Sound 1 fertig ist mit abspielen und spielt dann Sound 2. Dann musst du die auch hintereinader hängen und nicht mit Events erstellen. Das Beispiel is eh "verkehrt" dafür gibts die SequenceNote.

  • Das erst zwei dann eins abgespielt wird liegt wie Annubis schon sagt daran das beide Events einfach direkt nacheinander abgefeuert werden ohne das auf eine "Fertig Meldung" gewartet wird, halt wie in einer Sequenz.
    Zwei löst erst aus da eins noch im Delay steckt beide werden "fast zeitgleich" gestartet, eins zwar ein wenig früher aber das Delay verzögert das Ganze.


    Wenn du möchtest das erst eins und dann zwei abgefeuert wird, dann wirst du event zwei am ende von eins aufrufen müssen, also nach dem Delay.
    Anders wird das nicht möglich sein.


    Das die Events zeitgleich gestartet werden und nicht in Reihe, liegt daran das jedes Event für sich gekapselt ist und eine Rückmeldung nicht erfolgt.

    • Offizieller Beitrag

    Ihr seht ja, dass ich Print Strings mit den String "Nix" erstellt habe. das 3 mal. Ich könnte es Tausendmal machen, aber die tausendmal werden zuerst abgefeuert und dann wird event 2 gestartet.
    Ich bin damals auch zuerst davon ausgegangen, dass Event 1 und Event 2 gleichzeitig abgespielt werden. Sodass das Programm zeitgleich abgespielt wird. Somit müsste einmal der print String Nix kommen, dann Zwei und dann Nix.


    Eine Sequenz wird auch erst abgewartet, bis das Ende vom BP erreicht wurde.

  • Die Verarbeitungszeit der Textanzeige ist bei dem ersten Beispiel schneller als der Aufruf des zweiten Events.
    Wenn du tausend mal Nix ausgeben lässt dann wird irgendwann zwischen den nixen eine zwei stehen

  • Die Verarbeitungszeit der Textanzeige ist bei dem ersten Beispiel schneller als der Aufruf des zweiten Events.
    Wenn du tausend mal Nix ausgeben lässt dann wird irgendwann zwischen den nixen eine zwei stehen

    Nein wird es nicht. Er kann des auch 1mio mal machen und das Nix wird erst am Ende kommen. Erst wenn er Multiprozessorsupport einbaut, dann wird die Aussage zutreffen.


    In einem Tick wird alles "nacheinander" abgearbeit. Also für uns in einer Zehntausendstel Sekunde. Praktisch also nacheinander. Erst wenn der Tick durch mehrere Pipelines des Prozessors berechnet wird, kann es passieren, dass das "nix" mittendrinn ausgegeben wird. Läuft es über einen Prozessor, wird auch der alles nacheinander berechnen. Etwas anderes ist allerdings sein Delay, denn der überspringt ja gerade die nächsten Ticks bis das Delay abgearbeitet ist. Das Sequence macht also nix anderes und arbeitet alles was drann hängt in einem Tick ab. Wenn es zuviel ist, dann laggt das Spiel, weil er nicht mehr nach kommt und ein Tick wahrnehmbar wird.

  • Es werden sogar Events nach dem Events abgespielt und Event 2 Muss warten. Nur ein Delay hebt alles auf, was ich sogar irgendwie doof finde.

    So doof ist das gar nicht, denn sonnst würde dein Spiel für die Zeit des Delay anhalten.


    Wenn du oben das zweite Bild an das EventTick hängst wirst du sehen das so lange "zwei" geprintet wird bis die Deyay-Zeit um ist.
    Das Delay wird also unabhängig vom Game Loop ausgeführt.

  • Nein wird es nicht. Er kann des auch 1mio mal machen und das Nix wird erst am Ende kommen. Erst wenn er Multiprozessorsupport einbaut, dann wird die Aussage zutreffen.
    In einem Tick wird alles "nacheinander" abgearbeit. Also für uns in einer Zehntausendstel Sekunde. Praktisch also nacheinander. Erst wenn der Tick durch mehrere Pipelines des Prozessors berechnet wird, kann es passieren, dass das "nix" mittendrinn ausgegeben wird. Läuft es über einen Prozessor, wird auch der alles nacheinander berechnen. Etwas anderes ist allerdings sein Delay, denn der überspringt ja gerade die nächsten Ticks bis das Delay abgearbeitet ist. Das Sequence macht also nix anderes und arbeitet alles was drann hängt in einem Tick ab. Wenn es zuviel ist, dann laggt das Spiel, weil er nicht mehr nach kommt und ein Tick wahrnehmbar wird.

    ja klar, nicht zuende gedacht auf meiner Seite

  • Suchst du nicht eher nach Functions statt Events? Eine Function hat einen Return-Ausgang und egal was durch eine Function läuft, wenn es am Ende in einen Return-Output hat,
    wird es definitiv der Reihenfolge nach abgespielt. (Wenn nicht, verhält es sich so wie ein Event, es ignoriert den Flow)


    Also Functions werden definitiv hintereinander abgespielt, wenn man die Return-Spur benutzt - Events würde ich da weniger trauen.

    • Offizieller Beitrag

    Ich suche eher nach Events, statt Funktionen. Funktionen habe ich schon genügend in C++ geschrieben, da weis ich, dass erst die Funktion abgearbeitet wird, und dann das nächste Node abgespielt wird.
    Ich glaub mich hat auch nur ein Delay komplett aus der Bahn geworfen, dass ich an den Event gezweifelt habe. Wenn man 1000 nodes vor sich hat und dann nach Fehlern sucht, dass ist hart ^^ Und am Ende war es nur ein Delay.
    Funktionen nutze ich sogar überhaubt nicht. Lieber Makros. Denn den Funktionen traue ich zb nicht ^^

  • Ein Delay hat nichts damit zu tun. Dem Event 1 ist es egal ob Event 2 abgespielt wird oder nicht. Es nimmt keine Rücksicht darauf.
    Wenn Event 1 eine riesen Kette an Logik hat, die es "abarbeiten" muss, dann kann es schon mal eine Milisekunde dauern bis der Logikstrang von Event 1 bis zum Ende angelangt ist.
    Ob du jetzt ein Delay von 1 Milisekunde nimmst, oder einen Riesen Logik-Strang. Die Events laufen unabhängig voneinander.


    Epic selbst sagt auch, dass Events unabhängig voneinander laufen, gerade WEIL sie die Möglichkeit auf Flow Control haben (Delay, Timeline etc).
    Bei Functions ist es garantiert, dass sie der Reihenfolge nach durchlaufen, gerade WEIL sie nicht die Möglichkeit auf Flow Control haben.



    Zitat von Hier:
    "...events like its name are a starting point of any independent tasks in a task queue system,
    that's why it was given Red color(most easily spotted even zoom out of graph).
    And call event node will have no return values, which means you can't and not allowed
    to depend on this event call's result, you fire it and it will do it's thing, just wait and profit."



    Zitat von Hier:
    "Functions are guaranteed to execute and return immediately by limiting what
    kinds of nodes can be placed in a function (latent actions, timelines, etc… are all prohibited)."

    • Offizieller Beitrag

    Hab ich jetzt leider nicht verstanden. Wir haben doch jetzt alle bestätigt, sogar ich mit meinen Tests, dass Events bis zum Ende abgespielt werden und die nachfolgenden Events erst dann abgespielt werden, wenn die vorher anschließende Event fertig ist. Ein Delay hebt es auf. Es sagt dem Event Strang hier ist schluss, hier übernehme ich, somit wird das nächste Event abgespielt, falls eins drann ist.

  • Versteh mich nicht falsch, Ich zitiere nur das Wiki.


    Wenn Du Events benutzt im glauben, dass das nächste Event Rücksicht darauf nimmt,


    ob das vorherige Event durchgelaufen ist, dann ist das Deine Sache. xD