【发布时间】:2014-05-23 05:25:40
【问题描述】:
我正在努力实现以下目标:
在画布上绘制了许多同心圆(或环)。每个圆圈都有一个“洞”,因此在其后面绘制的较小圆圈是部分可见的。每一帧(我们使用 window.requestAnimationFrame 来渲染)每个圆/形状/环的半径都会略微增加。
图像here 中描绘了一个带有两个环的场景。
代码:
function draw() {
drawBgr();
for (var i = 0, len = rings.length; i < len; i++) {
rings[i].draw();
}
}
function drawBgr() {
context.globalCompositeOperation = "source-over";
context.clearRect(0, 0, WIDTH, HEIGHT);
context.rect(0, 0, WIDTH, HEIGHT);
context.fillStyle = '#FFFFFF';
context.fill();
}
function squareRing(ring) { //called by rings[i].draw();
context.globalCompositeOperation = "source-over";
context.fillRect(ring.centerX - ring.radius / 2, ring.centerY - ring.radius / 2, ring.radius, ring.radius);
context.globalCompositeOperation = "source-out";
context.beginPath();
context.arc(CENTER_X, CENTER_Y, ring.radius, 0, 2 * Math.PI, false);
//context.lineWidth = RING_MAX_LINE_WIDTH * (ring.radius / MAX_SIDE);
context.fillStyle = '#000000';
context.fill();
context.globalCompositeOperation = "source-over";
}
这到底是什么问题?我在绘制圆圈之前调用 clearRect 。请参阅“我实际得到的”图像。这是在多个帧上绘制 SINGLE RING 的结果。我不应该得到任何与中间有一个空心正方形的黑色圆圈不同的东西。 (请注意,半径每帧都在增加。)
我确实意识到切换 globalCompositeOperation 可能不足以达到我想要的效果。如何在画布上绘制的对象中绘制一个“洞”而不擦除我要修改的对象下方“洞”中的所有内容?
This 是我用作 globalCompositeOperation 值参考的教程。
我使用的是 Firefox 28.0。
【问题讨论】:
标签: javascript html canvas globalcompositeoperation