小李从睡梦中醒来,惊愕地发现世界的 cocos 技术仿佛倒退了一个世纪,所有人都不会设置物体位置了。曾经熟悉的高效编程方式变得陌生而繁琐。
当他试图在这个陌生的技术环境中继续自己的开发工作时,却遇到了重重阻碍。他发现之前的逻辑中,不管传进来的值是否和当前值相等,都会无脑设置并触发后续的回调等操作。而新的接口会判断传进来的值是否相等,如果相等则什么都不会做。
就比如在引擎外部修改 Node 的 worldPosition/worldScale 等返回的 readonly 属性,然后再调用引擎设置接口,这种情况将不会触发数据脏标记,导致渲染画面不更新。正确的做法应该是准备一个缓存变量,如:
let worldPos = v3 ();
worldPos.x = 10;
this.node.setWorldPosition (worldPos);
小李顺着这个思路写出了新的代码
let worldPosition = node.getWorldPosition ().clone();
worldPosition.x = 10;
node.setWorldPosition (worldPosition);
worldPosition.x = 20;
node.setWorldPosition (worldPosition);
然而,结果却让他大失所望,代码并没有如预期般生效。
因为判断代码是对比两个对象的 引用
是否相等,可如果左右两边是同一个对象,那这个值是 100%
相等的,无论其x,y,z的值是否被改变。小李不禁感叹:“这么多年了瞎折腾的东西还少吗?” 在这个技术倒退的世界里,小李感到无比迷茫,他不知道自己还能坚持多久,也不知道何时才能让 cocos 技术重回正轨。