我的javascript画布有问题。 我试图在画布上放置几个在画布边缘移动和弹跳的物体。如果我创建一个对象,它没有问题,但如果我想创建更多对象,它们就会连接起来。
Fiddle example:
https://jsfiddle.net/mwbgwa39/
如果有人可以帮助我,我将非常感激:)
答案 0 :(得分:2)
重要的是在每个对象绘图开始时调用beginPath()
,并在完成绘制该对象时调用closePath()
。如果你不调用它,画布认为你正在尝试继续绘制最后一个对象。您可以在MDN
for(i in obj_t)
{
ctx.beginPath();
obj_t[i].xPos = obj_t[i].xPos + obj_t[i].xVel;
obj_t[i].yPos = obj_t[i].yPos + obj_t[i].yVel;
ctx.arc(obj_t[i].xPos, obj_t[i].yPos, obj_t[i].r, 0, 2 * Math.PI);
ctx.stroke();
ctx.fill();
ctx.closePath(); // optional
}
编辑:正如Kaiido注意到在这个例子中调用closePath()
是没有必要的。有关何时应致电closePath()
can be found in this SO question。
答案 1 :(得分:2)
你正在画一条路。每次你画一些东西,它都会继续你到目前为止所做的道路。您可以将beginPath移动到for循环中,为每个圆圈开始一条新路径:
ctx.clearRect(0, 0, 400, 400);
for(i in obj_t)
{
ctx.beginPath();
// draw here
}
ctx.closePath();