我有以下代码用于将绘制调用写入“后台缓冲区”画布,然后使用 drawImage 将它们放置在主画布中。这是出于优化目的并确保所有图像按顺序放置。
在将缓冲画布放在主画布上之前,我使用 fillRect 在主画布上创建深蓝色背景。
但是,蓝色背景是在精灵之后渲染的。这是出乎意料的,因为我首先调用它的 fillRect 。
这是我的代码:
render: function() {
this.buffer.clearRect(0,0,this.w,this.h);
this.context.fillStyle = "#000044";
this.context.fillRect(0,0,this.w,this.h);
for (var i in this.renderQueue) {
for (var ii = 0; ii < this.renderQueue[i].length; ii++) {
sprite = this.renderQueue[i][ii];
// Draw it!
this.buffer.fillStyle = "green";
this.buffer.fillRect(sprite.x, sprite.y, sprite.w, sprite.h);
}
}
this.context.drawImage(this.bufferCanvas,0,0);
}
当我在缓冲区画布上使用 fillRect 而不是主要画布时,也会发生这种情况。
在 'source-over' 和 'destination-over' (对于两种上下文)之间更改 globalCompositeOperation 不会改变这一点。
矛盾的是,如果我将蓝色 fillRect与其他绘图调用一起放在嵌套的 for 循环中,它会按预期工作......
提前致谢!
附录:更改复合操作的行为确实符合预期,但不是为了解决这个特定问题。很抱歉模棱两可。