Object unparenten

  • GM 7

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

  • Object unparenten

    Hi Leute,

    funzt alles schön und gut mit "object_set_parent(object,-1)", aber isses nur bei mir oder laggt das irgendwie rum? Ich mein es laggt nicht wirklich, aber es wird erst nach ca. 3 Sekunden wirksam obwohl der Code im Create Event ausgeführt wird. Wtf, ist das normal so? Falls schon, gibts da irgendwelche Alternativen?

    MfG,
    Lightning
    :| < Hallo. Nein ich bin nicht die Signatur, ich putze hier nur.
  • Ja, das weiß ich. Mir wurde gesagt, dass man das glaube ich nicht machen soll, wenn Instanzen des Objektes davon im Raum sind. Stimmt das? Ich meine es geht ja, aber erst nach 3 Sekunden...
    :| < Hallo. Nein ich bin nicht die Signatur, ich putze hier nur.
  • Achso. Okey, hab diese Funktion selber noch nie benutzt.
    Vieleicht kannst du es so machen dass nach dem ändern des parent status, die betroffenen Instanzen ersetzt werden (also mit destroy und create).

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Ich find das eh interessant, dass das überhaupt funktioniert. Soll das jetzt heißen, dass der GM in regelmäßigen Abständen die Objekt-Informationen für jede Instanz aktualisiert? 8|
    Weil normalerweise ist das so gedacht, dass du das parent veränderst, bevor überhaupt Instanzen des betroffenen Objektes erstellt werden - aus genau dem Grund hab ich das damals bei einem (momentan auf Trockeneis liegenden) Projekt folgendermaßen gelöst:

    GML-Quellcode

    1. // Parent entfernen:
    2. instance_deactivate_object(obj);
    3. object_set_parent(obj,-1);
    4. instance_activate_object(obj);


    GML-Quellcode

    1. // Parent setzen:
    2. instance_deactivate_object(obj);
    3. object_set_parent(obj,ein_parent_objekt);
    4. instance_activate_object(obj);


    Das funktioniert ohne Verzögerung - aber ich dachte bisher, dass das der einzige Weg ist, auf dem das überhaupt geht. Man lernt halt nie aus. :D
  • Irrenhaus3 schrieb:

    Ich find das eh interessant, dass das überhaupt funktioniert. Soll das jetzt heißen, dass der GM in regelmäßigen Abständen die Objekt-Informationen für jede Instanz aktualisiert? 8|

    Ich hab keine Ahnung wie die technische Implementation von parents realisiert ist, geschweige denn im Runner des GM's, aber müsste nicht theoretisch jedesmall wenn ein Aufruf an einen parent stattfindet automatisch nur die Objekte einbezogen werden die parents sind? Oder liegt die Information darüber welche objekte wessen childs sind, nicht bei den Instanzen selbst vor?

    Edit: Sehr gute Methode übrigens! Wäre nicht darauf gekommen xD

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Aus der Hilfe von Studio:
    (...) This means that all instances of this object that are created after the parent has been changed will be created with this new parent, while instances that are already in the room may not be affected. Please note that this is not an instance function! You cannot set the parent of individual instances, only of the object and so changing this while there are instances in the room is not recommended and can lead to unpredictable results. You may also set this to -1 to remove parents from the object.

    Es wird also davon abgeraten das zu tun, was du vorhast.
    Aber warum? Eigentlich wäre meine Einschätzung identisch zu der von DragonGamer gewesen: Instanzen haben lediglich eine Referenz auf ihr Object und fertig. Simple Kopien werden wohl auch nicht erzeugt (auch wenn das die naheliegende Alternative wäre).

    Ich habe ein paar mögliche Vermutungen, warum es da zu Chaos kommt ist:
    • Bezüglich der Event-Verarbeitung: Beim Erstellen einer Instanz wird weniger das Objekt kopiert sondern die Instanz lediglich beim Event-Controller entsprechend der Events des Objects eingetragen. Das heißt, dass nur an dieser einen Stelle wirklich der Parent beachtet wird. Komisches Verhalten könnte auftreten, wenn der Parent zusätzliche Events hat.
    • Bezüglich der Ansprache durch "with (objChildrenOfThisParent)": Irgendwie muss der GM effizient speichern, zu welcher Object-Id welche Instanzen gehören. Da eine Instanz zu mehreren Object-Ids gehören kann, müsste der GM entweder jedes Mal die Verwandtschaft überprüfen oder für jede Object-Id seperate Listen führen. Letzteres dürfte wesentlich schneller sein. Diese Listen werden wieder nur bei Create/Destroy aktualisiert.
    • Direkte Übernahme vom Parent-Verhalten: Wenn man einen Parent und das zugehörige Child gleichzeitig im Raum hat kann man beobachten, wie das Child auch auf bestimmte Sachen reagiert, die dem Parent widerfahren. Wie das genau abläuft, weiß ich leider nicht, da ich dieses Feature nie benutzt habe. Es kann sein, dass gerade deshalb die Event-Calls doch ganz anders funktionieren als oben vermutet.


    Zu guter Letzt kann es natürlich sein, dass der GM nur hin und wieder diese Referenzlisten aufräumt. Gerade denk ich aber, dass die entscheidenden Hinweise bei Punkt 3 zu finden sind. Blöderweise hab ich grad keine Zeit zum Testen und kenne das Verhalten da selber nicht gut genug.