我正在学习画布圆圈运动轨迹效果的示例代码。我对push(x:Pos,y:Pos)within the
storeLastPositio()函数有点困惑,示例代码如下:
ctx = canvas.getContext('2d');
var xPos = -100, yPos =170;
var motionTrailLength = 10;
var positions = [];
function storeLastPosition(xPos,yPos){
positions.push({
x: xPos,
y: yPos
});
if (positions.length > motionTrailLength){
positions.shift();
}
}
function update(){
ctx.clearRect(0,0,canvas.width,canvas.height);
for(var i = 0;i<positions.length;i++){
ctx.beginPath();
ctx.arc(positions[i].x,positions[i].y, 50,0,2*Math.PI);
ctx.fillStyle='green';
ctx.fill();
}
ctx.beginPath();
ctx.arc(xPos,yPos,50,0,Math.PI*2);
ctx.fillStyle = "#FF6A6A";
ctx.fill();
storeLastPosition(xPos,yPos);
if(xPos > 600){
xPos = -100;
}
xPos +=3;
requestAnimationFrame(update);
}
update();
我只是混淆了push()
函数中的storeLastPosition()
部分,是否将对象属性推送到数组中?
答案 0 :(得分:0)
push
方法在适当的位置改变数组,以将新元素添加到数组的末尾。在这种情况下,您要向数组添加新Object,而不是属性。因此,您的数组将包含x / y位置的对象。
有关详细信息,请参阅the MDN Docs on Array.prototype.push