我正面临这个问题,我的randomPoints
数组元素已被push方法替换。
Here is the output of my Console
我不知道为什么会这样,但是如果我不使用randomPoint.add
,它就不会替换并且不能正常工作。
randomPoint.add
调整相同的Vector对象,就像没有它返回的一样。
var hw
var center
var randomPoints = []
var pointWidth = 20
var points = 300
centerCircleWidth = 300;
pointsOffset = 10
function setup(){
hw = createVector(600,500)
createCanvas(hw.x,hw.y)
center = createVector(hw.x/2,hw.y/2)
var randomPoint = createVector(0,0)
randomPoints.push(randomPoint)
randomPoint = p5.Vector.fromAngle(-radians(120), random(centerCircleWidth/2-pointWidth,centerCircleWidth/2-pointsOffset))
randomPoints.push(randomPoint)
console.log(randomPoint)
randomPoint = randomPoint.add(p5.Vector.fromAngle(radians(60), random(pointsOffset,2*pointsOffset)))
// this here replaces the last element of array by itself and add another element of same type.
randomPoints.push(randomPoint)
console.log(randomPoint)
console.log(randomPoints)
}
function draw(){
translate(center.x, center.y)
background(51);
strokeWeight(0)
fill(255)
ellipse(0,0, centerCircleWidth, centerCircleWidth)
for(i=0;i<randomPoints.length;i++){
fill(10)
ellipse(randomPoints[i].x,randomPoints[i].y,pointWidth,pointWidth)
}
}
答案 0 :(得分:0)
您的问题似乎是对象引用问题。第三个push
不会替换数组中的前一个元素,但是您正在更新数组所保存的 reference ,因此正在更新数组中的元素。
如果删除第三个push
,您将看到数组中的第二项仍将更新。
您需要做的是创建randomPoint
的副本,然后对其进行更改,或者创建一个新变量。
看看this SOF答案,该答案应该更清楚。
答案 1 :(得分:0)
尝试:
let randomPoint_1 = createVector(0,0)
randomPoints.push(randomPoint_1)
let randomPoint_2 = p5.Vector.fromAngle(-radians(120) // ....