如何正确清除旋转的HTML5画布上下文?

时间:2012-10-01 19:19:39

标签: javascript html html5 canvas html5-canvas

我需要清除旋转的矩形并在画布上再次绘制它,无论是在同一个地方还是其他地方。问题是,清除的部分与矩形的边界不匹配,留下脏的位。

var cvs = document.getElementById('testcanvas');
var ctx = cvs.getContext('2d');

var rectColor = 'green';
var x = 300;
var y = 10;
var width = 200;
var height = 150;
var rotation = 0;
setInterval(animate, 100);

function animate(){
    clearRect();
    update();
    drawRect();    
}

function clearRect(){
    ctx.save();
    ctx.rotate(rotation);
    ctx.clearRect(x, y, width, height);
    ctx.restore();
}

function update(){
    rotation += 0.1;
    x++;
}

function drawRect(){
    ctx.save();
    ctx.fillStyle = rectColor;
    ctx.rotate(rotation);
    ctx.fillRect(x, y, width, height); 
    ctx.restore();        
}

http://jsfiddle.net/MFz2z/15/

另一个问题,clearRect()在旋转画布时在Firefox上的行为有所不同,方法是清除旋转矩形使用的整个未旋转空间。
http://jsfiddle.net/MFz2z/17/

除了清除整个画布并再次绘制所有内容之外,还有其他解决方法吗?我使用的是Chrome 22和Firefox 15.0.1。

1 个答案:

答案 0 :(得分:2)

这可能是由于像素的抗锯齿产生了额外的花絮。

您可以使用此http://jsfiddle.net/MFz2z/28/并基本上从每一侧清除1个像素。