看了下 Cocos4 仓库,有 90 多个提交了。
其中一个提交:
https://github.com/cocos/cocos4/commit/e913d77704ac1ce670cafae0981c0e304a34f0f3
这个改动一开始有点奇怪。分量越长的,容错越大,至少保证一个单位的容错系数。为什么这么改呢,看来是有新的应用场景触发了这样的改动。
问了下 AI,可能的触发场景。
这种改动通常是由于在实际开发中遇到了因绝对误差过严而导致的 Bug。在 Cocos 引擎中, equals3f 方法很可能被用于比较三维向量(如位置、缩放、旋转等),以下是一些典型的触发场景:
-
大世界坐标
当游戏场景很大,物体的世界坐标达到数千甚至更大时,例如一个开放世界游戏,角色位置(5000.0, 0.0, 5000.0)。由于浮点数精度,两次计算得到的坐标可能相差1e-5,如果原epsilon是1e-7,就会判定不相等,可能导致角色移动判定出错或动画状态异常。 -
连续变换累积
物体经过多次旋转、缩放、平移后,其变换矩阵反复计算,累积的浮点误差可能变大。比较两个本应相同的变换结果时,原来的绝对误差容易失效,而相对误差能更好地容忍这种累积误差。 -
物理引擎交互
物理模拟中经常需要比较位置、速度等向量。当物体高速运动或处于大范围空间时,相对误差比较能保证模拟的稳定性,避免因微小绝对误差导致的“抖动”或错误碰撞响应。 -
网络同步验证
在多玩家游戏中,服务端和客户端的坐标可能因网络延迟和浮点运算差异而略有不同。使用相对误差比较可以更宽容地认为两者一致,减少不必要的状态修正。
这次修改让 equals3f 方法 从“固定精度”升级为“自适应精度” ,大幅提升了引擎在处理大数值和复杂运算时的鲁棒性,属于一次防患于未然或修复已出现问题的优化。
再看下下一个比较有意思的提交:
我以为小游戏写入文件用异步 api 是基本操作。。。3.8 写入竟然是用的同步。。。

