subtract()方法的坑

const direction = startPos.subtract(endPos).normalize();
会改变startPos的原始值
direction==startPos结果是true
求大佬解答为什么要这么设计

如果你不想改变startPos的值,可以用Vec3.subtract(out , startPos,endPos);

3赞

这么设计的原因是如果不改变 this,那势必返回结果要 new Vec3();又因为如果这个 API 这么设计,其它 API 都需要这么设计,那最后就是■■对象很多

意思是每次新建一个Vec3()对象会造成资源浪费是吗,请问cocos有自动回收或者主动回收的机制吗

当然有自动回收的,就是GC,不频繁的话问题不大,但是如果频繁分配就也是个问题,比如你每帧几百次数学操作而且里面 new Vec3() ,那可能会拖累帧率,所以你可以看看cocos 内部,都是用的缓存,比如这样:

// 临时变量,专门用于 A.a() 方法
const v_cache = new Vec3();

class A {
  a() {
     Vec3.add(v_cache, v1, v2);
     // .....
     return v_cache.clone(); // 最后别把临时变量带出去了
  }
}

哦哦,感谢大佬解惑

这是语言的锅,如果有结构体类型就不会这样了

为了性能啊