《一觉醒来,全球 cocos 技术下降 100 年》

小李从睡梦中醒来,惊愕地发现世界的 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 技术重回正轨。

6赞

催更催更赶紧写

2赞

请阅读大型连载科幻小说《重生之我在2024年写cocos,连改坐标都不会》

3赞

一般一帧只修改一次,很难有多次修改的

2赞

竟然还能在cocos刷到这类型小说,赶紧更新,催更

3赞

我刚看完那个3.8.4的帖子 再刷到这个 我真的会笑死 顺便问问各位大佬有面试资料吗

2赞

后面的剧情要付费吗

2赞

不用,看10次激励视频就可以继续观看了

1赞

发抖音吧, 我给你赞助个抖加!!

1赞

谁让你第二次设置没继续clone的。。。

1赞

小李感到无比迷茫之时,浑浑噩噩在b站闲逛,突然发现一个顶着巨大光环的人,正在招徒授课。

此人号称纵横江湖14年。在手游开发上颇有建树。熟练掌握Java、C++、C、0C、Swift、Lua、Js、C#、Nodejs、Python、Shell等神兵利器。

曾在腾讯,畅游,开心网,西山居这些巨头宗门担任武术教练。

曾在SLG,MMO,ARPG各个副本中杀个七进七出。

小李顿时眼里有光,觉得只要得此人百分之一真传,足以在cocos中有一立足之地。

1赞

突然感觉我在2.x挺好的 :sweat_smile:

1赞

这个代码,怎么跑都是可以的。 你试试就知道。

2赞

他这个代码,第一次也不需要clone。 依然会生效的。

3赞

getWorldPosition()已经是copy过的, 不需要clone也能使用.
只有get worldPosition是直接返回的, 需要clone才能使用.

然后下面的两次setWorldPosition应该是都能生效的, 因为里面也是copy而不是直接赋值引用.

3赞

大家不要激动,只有在复用内部变量的情况下才会跳过矩阵更新。
并不是说不能重复设置。

1赞

+++++1

1赞

我只能说这个设计真的是太反人类了 可以说是cocos自己的创新 只有他们自己觉得这个挺好的啊提高了引擎的效率 以后设置个位置我估计都要写个对象池来管理v3对象列表了

1赞

引擎都发展了那么多年了 还在研究设置位置 设置方向的东西 我真的是服了

5赞

还有一直不能理解 为啥设置 x,y 就能直接操作节点 方法,
而大小 却要通过 通过获取组件的防止去设置 , 这是恶心。
还有设置透明度 啥的,也要通过组件 。写起来一点都不方便,你要不把 位置 大小 ,透明度 都放到节点上去操作,要不整成一个组件就完事了,非得分开来,真的一点都不方便。非得把代码简单的代码 搞复杂 。

1赞