javascript - 为 Canvas 内的圆设置动画

标签 javascript jquery html canvas

我正在尝试在 html5 Canvas 内制作一个圆圈的动画,但在更新此圆圈(AKA 删除旧位置并绘制新位置)时遇到问题 我的jsfiddle :

如您所见,clear 函数并未清除整个圆圈,但它使其颜色变浅,无论如何,是否可以清除旧圆圈,而无需清除整个 Canvas 或清除包含该圆圈的小矩形圆圈?

        var clearCircle = function (c) {
            ctx.save();
            ctx.globalCompositeOperation = 'destination-out';
            ctx.beginPath();
            ctx.arc(c.x, c.y, c.r, 0, 2 * Math.PI, false);
            ctx.fill();
            ctx.restore();
        };

最佳答案

您只需将复合模式更改为复制并在全局范围内移动即可。这将删除所有内容,但会限制您进行一次绘制操作。

<强> Modified fiddle using copy composite mode

更正确的方法是使用:

  • clearRect(x, y, w, h)
  • fillRect(x, y, w, h)

如果您需要背景颜色,则选择后者。如果您想用图像填充背景,也可以使用drawImage(img, x, y)

所有这些方法(复合模式除外)都允许您仅绘制需要更新的区域:

  • 存储圆的当前位置
  • 在下次更新时,清除矩形/填充矩形等圆的位置和宽度和高度。在尺寸中添加一两个像素以捕获抗锯齿像素(x - 1、y - 1、w + 2、h + 2)。
  • 绘制新圆圈并重复:

调整该函数采用:

var clearCircle = function (c) {
    ctx.clearRect(c.x - c.r - 1, c.y - c.r - 1, c.r*2+2, c.r*2+2);
};

<强> Modified fiddle

关于javascript - 为 Canvas 内的圆设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20800366/

相关文章:

javascript - Safari 浏览器在旋转变换后渲染 SVG 两次

php - 如何在不刷新页面的情况下自动提交此表单?

c# - 如何从 Web Api 获取自定义错误消息到 jQuery.ajax?

iphone - 在 ios7 上,&lt;input type=date> 在没有默认值的情况下不会显示在 webview 中

html - Bootstrap 页脚不会粘在页面底部

javascript - 在 Angular 中显示 ContentFul RichText

c# - 密码字段的水印文本

javascript - 在 three.js 中创建一个新对象

javascript - 在div中显示提交的表单数据

javascript - 如何将 HTML 中显示的数字格式化为货币格式,包括 $ 符号并使用 <sup></sup> 放置小数?