[3.8.4 升级必读]:Node 的一些 set 接口行为的修正


这是我个人理解,拿坐标常做的事情。
1.只判断不修改, 这个如果用clone可能会浪费性能
2.修改计算,这个好像必须是clone出来的新pos,不然按现在的引擎逻辑,就会出错。
所以,只要保证1不浪费性能, 那么clone一个pos基本上是必须要做的。那么why not?

1赞

可以直接传分向量,虽然写法上复杂点

1赞

你说的对,写法有很多种,都能达成目标。
我觉得我们引擎设计的目标是,让更多人好用,大部分的时候,用直觉判断api不那么容易出错。这样对新手,小白都友好。说句实话,对于老手来说,引擎用了不爽了我就自己改了。但是新手,小白写个坐标,理解成本高。个人觉得可能是个值得考虑的问题

1赞

这就是逻辑通用性和写法通用性了
其实引擎可以判断分量来决定是否更新,但这样每个类似接口的判断逻辑都不同。但现在直接判断对象是否相同,就简单了。

1赞

getWorldPosition返回的不是一个新的对象吗?

1赞

哦~ 好吧,的确是这样。

1赞


我有疑问,帖子是5.31发的,和3.8.4有啥联系;
是3.8.4才改动还是3.8.4又有了新的改动;
哪些版本升级需要检查,5.31之前的版本还是所有版本

1赞

这帖子应该是3.8.4的第一个测试版出来的时候发的

1赞

还是引擎接口和项目接口中间包一层最安全,不管它改什么,中间层适配下就完事了.

2赞

按照新版本逻辑,
直接 ```
this.node.worldPosition = worldPos;
worldPos.y=3
this.node.worldPosition = worldPos;

设置第二次更新的时候就不生效了,因为是地址引用
1赞

是的! 对比的时候值会相等,跳过脏标记。 但是数据已经改了。

1赞

这个贴子是 3.8.4 社区版的时候就发了。。

1赞

是这样的.

但总感觉 . 还是好奇怪呀…
这样会造成很多"莫名其妙" 的困扰… 如果新人对这块儿的前因后果不了解. . 会陷入"逻辑地狱" , 自己明明设置了. 但效果就是达不到预期… 想到这里仿佛已经看到他们焦头烂额, 束手无策的样子了~ :upside_down_face:

我觉得下个版本应该还会有所调整. 现在这个调整真的可以算上是一个大坑了.

2赞

太反直觉了,即使我现在看了这个帖,过了几个月或者半年,突然有个需求我要用上的时候,也不一定用得对

1赞

看到一些框架,大量接口传参数都是{},问有没有内存GC和性能问题?

2赞

做值比较更合理吧,做地址比较确实会引起莫宁奇妙的逻辑,和预期不太相符,开发者很少在意这个点,然后发现问题的时候就是一顿操作,值比较消耗不了多少性能

1赞

你这个里面是判断传进来的是不是同一个对象 是同一个对象就不设置对吧?为什么不判断传进来的值是否相等呢?

1赞

第一次发现会判断是不是同一个对象来 是否设置的 最好是判断里面的内容是不是相等才合理啊!判断同一个对象是那个人想出来的奇葩想法 感觉是不是出间谍了

1赞

这不是引用类型吗,既然是同一个对象,那值是怎么能不相等的…

2赞