Godot: setget-Funktionen werden zur Selbstzuweisung aufgerufen

Erstellt am 12. Nov. 2016  ·  3Kommentare  ·  Quelle: godotengine/godot

Ich weiß nicht, ob dies das beabsichtigte Verhalten ist oder nicht (wenn ja, schließe dieses Problem einfach), aber dies sollte eindeutig nicht erlaubt sein!

Sagen wir,
1) Ich möchte, dass eine Variable foo standardmäßig den Wert 1 hat,
2) und ändert seinen Wert, wenn der Benutzer auf irgendeine Weise interagiert (sagen wir Eingabe).
3) Nachdem der Benutzer fertig ist, muss der Wert von foo wieder den Wert 1 haben.

Was hier passiert, ist, dass die mit setget verknüpften Funktionen jedes Mal aufgerufen werden, wenn der Wert auf 1 gesetzt wird, wenn er bereits 1 ist. Sie sollten einmal (das erste Mal) aufgerufen werden, wenn der ursprüngliche Wert anders ist. Das tötet die Leistung für mich etwas, ich weiß, dass ich dies tun kann:

if (new_value == old_value):
   return

Dies sollte jedoch automatisch erfolgen.

feature proposal gdscript

Hilfreichster Kommentar

Meiner Meinung nach lohnt es sich nicht, alten Code zu knacken, wenn es eine einfache Problemumgehung gibt (ich habe Code, der den Setter verwendet, um dem Benutzer eine Benachrichtigung für dieselben Wertzuweisungsversuche anzuzeigen).

Alle 3 Kommentare

Ich glaube nicht, dass es eine gute Idee ist, dies automatisch zu tun. Das Festlegen einer Variablen mit dem gleichen Wert, den sie bereits hat, sollte die Leistung nicht beeinträchtigen. Dies sollte Ihre setget Funktion bei Bedarf verarbeiten. Außerdem _wird_ das Hinzufügen einer Wertprüfung die Leistung beeinträchtigen, da es sich um eine neue (konzeptionell nicht benötigte) Verzweigung handelt.

Ich glaube auch nicht, dass wir einfach davon ausgehen können, dass die Einstellung des gleichen Wertes keinen Einfluss auf den Setter hat und daher umgangen werden kann.

Dies sieht so aus, dass Sie einen sehr komplizierten Einsteller haben, wenn die Einstellung eines Wertes jedes Mal einen solchen Leistungseinbruch bewirken kann.

Nun, normalerweise, wenn Sie nur Selbstzuweisungen durchführen, wäre dies kein Problem, aber wenn Sie mehr Arbeit als das Zuweisen neuer Werte leisten, wie es bei "setget" alles geht, wird dies die Leistung beeinträchtigen. Vor allem, wenn der Wert unverändert bleibt und jedem Frame selbst zugewiesen wird.

Außerdem schützen Sie alle C++-Compiler (die ich kenne) vor solchen Gräueltaten. (Zumindest für Basistypen, durch das Überladen des Zuweisungsoperators wird dieser Schutz aufgehoben) Tatsächlich habe ich einige Code-Asserts gesehen, die dies überprüfen, um zu sehen, ob der Wert nach der Selbstzuweisung für Float-Zahlen auf AMD-CPUs gleich bleibt. Das wurde als Gesundheitscheck für ein Projekt gemacht, bei dem ich vergessen hatte, wie es hieß.

Meiner Meinung nach lohnt es sich nicht, alten Code zu knacken, wenn es eine einfache Problemumgehung gibt (ich habe Code, der den Setter verwendet, um dem Benutzer eine Benachrichtigung für dieselben Wertzuweisungsversuche anzuzeigen).

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen