我正在尝试做一个js应用程序,基本上可以在画布元素上移动一些球。我设置了context.fillStyle = "rgba(12, 34, 56, 0.2)";问题是球在短时间后从透明变成不透明。我如何保持他们的透明度,为什么他们变得不透明?
以下是我的代码的简化版本:

function startScript(){
var layer1       = document.getElementById("layer1");
var context1     = layer1.getContext("2d");

var posX = 5;

context1.fillStyle = "rgba(12, 34, 56, 0.05)";

animate();

function animate() {

    posX+=3;

    context1.arc(posX, 200, 5, 0, Math.PI*2);
    context1.fill();

    // request new frame
    requestAnimFrame(function() {
        animate();
    });
}
}

window.requestAnimFrame = (function(callback) {
    return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame ||
    function(callback) {
        window.setTimeout(callback, 1000 / 60);
    };
})();

最佳答案

在绘制新行之前,必须使用context1.beginPath
否则,上下文将记住并重新绘制新弧之外的上一个弧。
另外,在绘制圆弧之后,应该执行context1.closePath()。
否则,上下文将绘制未闭合的圆弧而不是圆。

context1.beginPath();
context1.arc(posX, 200, 5, 0, Math.PI*2);
context1.closePath();
context1.fill();

09-08 02:32