Godot: les fonctions setget sont appelées pour l'auto-affectation

Créé le 12 nov. 2016  ·  3Commentaires  ·  Source: godotengine/godot

Je ne sais pas si c'est le comportement prévu ou non (si c'est le cas, désolé, fermez simplement ce problème), mais cela ne devrait clairement pas être autorisé !

Laisse nous dire,
1) Je veux qu'une variable foo ait la valeur 1 par défaut,
2) et il change de valeur lorsque l'utilisateur interagit d'une manière ou d'une autre (disons entrée).
3) Une fois que l'utilisateur a terminé, la valeur de foo doit à nouveau avoir la valeur 1.

Ce qui se passe ici, c'est que les fonctions associées à setget sont appelées chaque fois que la valeur est définie sur 1 alors qu'elle est déjà 1, elle doit être appelée une fois (la première fois) lorsque la valeur d'origine est différente. Cela tue un peu la performance pour moi, je sais que je peux faire ceci:

if (new_value == old_value):
   return

Mais cela devrait être fait automatiquement.

feature proposal gdscript

Commentaire le plus utile

cela ne vaut pas la peine de casser l'ancien code à mon avis lorsqu'il existe une solution de contournement simple (j'ai du code utilisant le setter pour afficher une notification à l'utilisateur pour les mêmes tentatives d'attribution de valeur).

Tous les 3 commentaires

Je ne pense pas que ce soit une bonne idée de le faire automatiquement. Définir une variable avec la même valeur qu'elle a déjà ne devrait pas affecter les performances, c'est quelque chose que votre fonction setget doit gérer si nécessaire. De plus, l'ajout d'un contrôle de valeur affectera les performances car il s'agit d'une nouvelle branche (conceptuellement inutile).

Je ne pense pas non plus que nous puissions simplement supposer que le réglage de la même valeur n'aura aucun impact sur le passeur et qu'il peut donc être contourné.

Cela semble que vous ayez un setter très compliqué si le réglage d'une valeur à chaque fois peut faire un tel impact sur les performances.

Eh bien, normalement, lorsque vous ne faites qu'une auto-affectation, ce ne serait pas un problème, mais si vous faites plus de travail que d'affecter une nouvelle valeur, comme ce qu'est "setget", cela nuira aux performances. Surtout si la valeur reste inchangée et auto-assignée à chaque image.

De plus, tous les compilateurs C++ (à ma connaissance) vous protègent contre de telles atrocités. (Au moins pour les types de base, surchargeant l'opérateur d'affectation, vous annulez cette protection) En fait, j'ai vu des assertions de code vérifier cela pour voir si la valeur reste la même après l'auto-affectation pour les nombres flottants sur les processeurs amd. Cela a été fait pour vérifier l'intégrité d'un projet, j'ai oublié son nom.

cela ne vaut pas la peine de casser l'ancien code à mon avis lorsqu'il existe une solution de contournement simple (j'ai du code utilisant le setter pour afficher une notification à l'utilisateur pour les mêmes tentatives d'attribution de valeur).

Cette page vous a été utile?
0 / 5 - 0 notes