push (Vec3)元组问题,求解。

updateSum(cameraPos: Vec3) {

        this.cameraPos.push(cameraPos);

    }

它push的是
image
但是通过
this.cameraPos[0]访问时,它会改变里面的值
const numb = this.propsArrangement - 1; console.log(this.cameraPos[numb] + '11111111' + this.cameraPos[this.propsArrangement - 1]+' '+this.cameraPos+' '+(this.propsArrangement - 1));


但是 这样写
const vecCur = [ new Vec3{1,2,3},new Vec3{4,5,6}] console.log(vecCur [1])
却可以正常打印出来,但是push没有new 。就很头疼,难道要写个函数专门添加吗?

看着像是 this.cameraPos 的第一个元素在外部被修改了。Vec3 算是引用类型的数据吧,就算 push 进数组了,调用 updateSum 传入的参数在其他地方被修改了也会引起数组内元素的修改。

排查一下吧,或者 this.cameraPos.push(cameraPos) 改为 this.cameraPos.push(cameraPos.clone()) 试试。

您好,还是不行,并且其它地方我并没有改变 this.cameraPos.push的值

要先把之前的vec3clone不然传入的参数会被传入的函数改变,无语,好大的坑image

什么坑?cameraPos 不是引擎的 API 呀,没搜到

最基本的引用赋值问题,Vec3不是基本类型,传递只是引用。

2赞

就是push到vec3的数组中,然后拿出来的时候要.clone,不然内容是错的。 :rofl:

嗯…… JS 本来就是这样的……

1赞