Godot: 调用 setget 函数进行自赋值

创建于 2016-11-12  ·  3评论  ·  资料来源: godotengine/godot

我不知道这是否是预期的行为(如果是,抱歉,请关闭此问题),但这显然不应该被允许!

让我们说,
1) 我希望变量foo默认值为 1,
2)当用户以某种方式交互时它会改变它的值(让我们说输入)。
3)用户完成后, foo的值必须再次为1。

这里发生的事情是,与setget关联的函数在值已经为 1 时每次设置为 1 时都会调用,当原始值不同时应该调用一次(第一次)。 这对我来说有点扼杀了性能,我知道我可以做到这一点:

if (new_value == old_value):
   return

但这应该是自动完成的。

feature proposal gdscript

最有用的评论

在我看来,当有一个简单的解决方法时,不值得破坏旧代码(我有代码利用 setter 向用户显示相同值分配尝试的通知)。

所有3条评论

我认为自动执行此操作不是一个好主意。 设置一个与它已有的值相同的变量不应该影响性能,这是你的setget函数应该在需要时处理的事情。 此外,添加值检查 _will_ 会影响性能,因为它是一种新的(概念上不需要的)分支。

我也不认为我们可以假设设置相同的值不会对 setter 产生影响,因此可以绕过它。

如果每次设置一个值都可以使性能受到影响,那么这看起来您有一个非常复杂的设置器。

好吧,通常情况下,当您只进行自我分配时,这不会有问题,但是如果您做的工作比分配新值更多,例如“setget”的全部意义,则会损害性能。 特别是如果该值保持不变并且每帧都自我分配。

此外,所有 C++ 编译器(我所知道的)都会保护您免受此类暴行的侵害。 (至少对于基本类型,重载赋值运算符会使这种保护失效)事实上,我已经看到一些代码断言检查该值以查看在 amd cpu 上的浮点数自赋值后值是否保持不变。 这是作为某个项目的健全性检查完成的,我忘记了它的名字。

在我看来,当有一个简单的解决方法时,不值得破坏旧代码(我有代码利用 setter 向用户显示相同值分配尝试的通知)。

此页面是否有帮助?
0 / 5 - 0 等级