新旧版本的向量的加减运算

我是从版本2.5.4升级到版本3.4,发现API变了许多。一些脚本的复用就改了我很长时间…
然后,做tween运动的时候,突然发现向量的计算跟旧版本不太一样。

tween内容:若干个点从坐标A散开再移动到坐标B,
部分代码如下:

for(let i = 0;i<6;i++){
let pst = pstA.add(pst_diff) //pst_diff是一个xy在范围R内随机的vec3
tween(node)
.set({ scale: v3(0.2, 0.2, 0.2), position: pstA })
.parallel(
tween().to(0.3, { position: pst }, { easing: ‘backInOut’ }),
tween().to(0.2, { scale: v3(1, 1, 1) }, { easing: ‘backInOut’ })
)
.to(0.2,{ position: pstB }, { easing: ‘backInOut’,} )
.start()
}

然后发现pstA在叠加随机值pst_diff给pst后,pstA也跟着变化了。查了API才知道 .add将当前向量与指定向量的相加 ,旧版本是有 .add.addSelf 之分的。

现在我是使用 let pst = pstA.clone().add(pst_diff) 代替 let pst = pstA.add(pst_diff)

所以我的问题是:除了这种方法 和 let pst = v3(pstA.x+pst_diff.x,pstA.y+pst_diff.y,pstA.z+pst_diff.y) 外,有其他的实现方法吗?在pstA叠加随机值pst_diff给pst后不变化pstA的值?

没有…

如果你的pstA是节点的坐标的话,可以直接用api getPostion或者getWorldPositon,这样返回的是一个全新的向量

pstA是节点的坐标,但是转递的时候直接将坐标转递过去。相比起 pst = node.getPosition().add(pst_diff),我是更倾向于用 pst = pstA.add(pst_diff) 的方式的。前者总觉得要反复调用node.getPosition(),就干脆用一个变量代替它。(习惯了这样写了,结果就遇上这个问题[掩面])

那你可以直接定制引擎,加一个自己喜欢的接口然后再cc.d里面声明一下

要克隆一下 不然会改原来的值

一坨一坨的clone垃圾代码

Vec2(3)有静态方法,还是建议少clone改用中间对象,3d比2d运算消耗大得多

请问,

Vec2(3)有静态方法

是什么意思?

PS:抱歉回复得晚了,我还以为除了clone没有其他方法就没再上论坛上看回复了…