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(); // 最后别把临时变量带出去了
}
}
哦哦,感谢大佬解惑
这是语言的锅,如果有结构体类型就不会这样了
为了性能啊