javascript - 在 Canvas 上渲染多个对象之前清除 Canvas

标签 javascript html animation canvas

我在 Canvas 上渲染了多个对象,每个对象都监听 keydown 的定向移动,并使用 requestAnimationFrame 重绘。 .

问题是,如果我在每个对象的重绘上都设置了透明 Canvas ,那么在不同对象的重绘中将运行多个透明 Canvas 函数,导致对象闪烁。在 Canvas 上重新绘制(和清除)多个对象的最佳方法是什么。

function CreatePawn() {             
            var x = 25,
                y = 25;

            animate();

            function draw() {               
                ctx.clearRect(0, 0, cwidth, cheight);
                ctx.beginPath();
                ctx.lineWidth="3";
                ctx.arc(x, y, 2, 0, Math.PI * 2, true); // circle               
                ctx.stroke();               
            };

            function animate() {
                requestAnimationFrame( animate );
                if(left) x -= speed;
                if(up) y -= speed;
                if(right) x += speed;
                if(down) y += speed;
                draw();
            };

最佳答案

对我有用的解决方案是运行 1 个全局 setInterval(时间循环),这将首先清除 Canvas ,然后循环重绘所有被插入数组的对象。

每个对象仍然可以有其内部时间循环来检查 x/y 变化,但重绘取决于全局 setInterval。

关于javascript - 在 Canvas 上渲染多个对象之前清除 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5522853/

相关文章:

Angular 路线过渡 - 根据当前路线向左或向右滑动?

javascript - 测试 AJAX 应用程序时如何测试断开连接?

html - width : 100% on table-cell work?怎么算

javascript - 使用 Chrome 扩展程序在页面加载时重定向

javascript - 在普通表单提交上加载 GIF

javascript - 当我打开模态视图时,标题图像出现在模态前面,如何停止?

python - 我怎样才能动画化代数运算,最好是用Python

javascript - ng-animate 在通过 webpack 加载时拒绝工作

javascript - 将变量发送到另一个函数?

javascript - 通过 Javascript 自动单击页面上带有唯一标签和类名的按钮的方法