Ergebnis 1 bis 16 von 16

Thema: Langer CC...

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Also ich habs mal getestet ^^

    Der Maker arbeitet anscheinend in einem Rechentakt immer einen Befehl pro parallel Event (wartet also wahrscheinlich diesen Takt lang bis alle Events einen Schritt weiter sind). Switch umschalten, Variablen einstellen uÄ. scheint die gleiche Zeit, also einen Rechentakt, zu benötigen.

    Ich habe folgenden Test versucht:

    1. erstellt ein neues Projekt
    2. Map verkleinern (20x15) und mit Gras-Chips füllen
    3. zwei Events erstellen mir der Start Condition "Parallel Process"
    4. die drei ersten Variablen benennen: "test", "zähler1" und "zähler2"
    5. das erste Event mit diesem Code füllen:
    Code:
    < > Label 1#
    < > Change Variable: Var[0001:test] + 1
    < > Change Switch: Var[0001] Switch ON
    < > Change Switch: Var[0001] Switch ON
    < > Change Switch: Var[0001] Switch ON
    < > Change Switch: Var[0001] Switch ON
    < > Change Switch: Var[0001] Switch ON
    < > Change Variable: Var[0001:test] - 1
    < > Change Variable: Var[0001:zähler1] + 1
    < > Goto Label 1#
    6. das zweite Event mit diesem Code füllen:
    Code:
    < > Label 1#
    < > Change Switch: Var[0001] Switch ON
    < > If Var[0001:test]
      < > Play Sound Effekt:Blow5
      < >
    :Else Case
     < > Change Switch: Var[0001] Switch ON
     < >
    :End Case
    < > Change Switch: Var[0001] Switch ON
    < > Change Variable: Var[0001:zähler1] + 1
    < > Goto Label 1#
    Im ersten Event wird eine Variable auf 1 und nach mehreren Fülloperationen wieder auf null gesetzt. Das zweite Event überprüft während der Fülloperationen diese Variable. Und tatsächlich erkennt er die zwischenzeitliche Veränderung, was man an dem nervigen Dauerton sehr gut erkennen kann.

    Mit F9 und den beiden Zähler-Variablen lässt sich das Geschwindigkeitsverhältnis der Events einsehen. Beide müssten genau gleich schnell laufen. Dadurch ist gewährleistet, dass die Fülloperationen des ersten Events und die If-Abfrage des zweiten Events gleichzeitig stattfinden.

    OK, eins steht fest: Die Variablen werden wahrscheinlich global verarbeitet. Aber eine ganz andere Sache ist etwas merkwürdig:
    Lässt man im Else-Teil die Switchänderung weg, wird das Event schneller durchgearbeitet. Befehle im Else-Teil einer Bedingung scheinen Rechenzeit zu beanspruchen, auch wenn der Else-Teil nicht aufgerufen wird.
    (Fügt man im ersten Event und im Else-Teil des zweiten Events noch einmal ChangeSwitch ein, kommt kein Ton mehr; bei noch einem Befehl mehr, laufen die Events nicht mehr gleich schnell...)



    CapSeb

  2. #2
    Du, jede Codezeile bremst den Maker, selbst Kommentare.

  3. #3
    Du, dein Versuch ist vielleicht nett gemeint.
    Nur ist er so gesehen wertlos.
    Deine erste Fehlvermutung ist das ein Makerbefehl lediglich einen Rechentakt benötigt. Wenn wir nun von der maschinennahen Sprache Assembler ausgehen, dann sieht man hier das für gewisse Operationen mehr als ein simpler Rechentakt benötigt wird. Und wir reden von eher "simplen" Dingen wie bspw. zwei Register voneinander abzuziehen.

    Bei deinem Versuch, verarscht dich simpel und einfach die anscheinend gleichzeitige Verarbeitung. Der Maker wird wohl wie die meisten Programme seine Befehle nacheinander abarbeiten. Nur wird er das bei anscheinend parallelen Prozessen nach einen gewissen Muster tun. Wenn ich hierbei einfach mal von der Threadarbeitsweise ausgehe, dann dürfte zwischen den Befehlen immer wieder für gewisse Anzahl an Millisekunden umgeschaltet werden.
    Das ganze passiert auf jeden Fall schnell genug um eine gewisse parallele Verarbeitung vorzutäuschen. Man sieht diesen Effekt recht gut wenn man versucht zu große PPs laufen zu lassen. Schon hat man den berühmten Ruckeleffekt wegen dem die Leute manchmal Wait 0.0 an ihre PPs hängen.

    So wird die Wiederholung immerhin für diese Dimensionen um eine Ewigkeit verzögert.


    Die nächste Fehlvermutung die schon logisch gesehen auffallen müsste, ist die Sache mit dem ELSE Case. Warum genau solltest du beim bauen eines Interpreters dir eine solche Geschwindigkeitsbremse einbauen?
    Du baust diese Falltrennung ja immerhin dafür ein, das du gewisse Teile des Codes ausklammern kannst.
    Deswegen ist es sicherlich völlig falsch direkt von Beanspruchung zu sprechen.

    Augenscheinlich scheint der Maker alles Zeile für Zeile einzulesen. Ergo wird wohl markiert sein welche Teile zum ELSE CASE gehören und welche eben nicht. Diese werden zwar kurz gelesen, aber dann wohl einfach übersprungen. Immerhin ist die Funktion des Zweiges das eben dies geschehen soll. Genau so dürfte es sich bei den Kommentaren verhalten.

    Ich würde an sich aber auch kaum weiter darüber nachdenken als es wirklich nötig ist. Wer sich mit den sichtbaren Makermechanismen auskennt, der wird auch keine Probleme beim zusammenklicken seiner Skripte haben.

    Das einzige was hier momentan nämlich geschieht, sind Vermutungen. *schulterzuck*

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •