我想做的是在缓冲区上绘制图形,然后将其原样复制到画布上,以便进行动画处理并避免闪烁问题。但是我没有找到这个选项。有人知道我该怎么做吗?
Opera 9.10非常缓慢,显示绘图过程。如果你想看到一个没有使用双缓冲的浏览器,请试用Opera 9.10。
有些人认为浏览器在某种程度上确定了绘图过程何时结束,但你能解释一下它是如何工作的吗?即使绘图很慢,我在Firefox、Chrome或IE9中也没有注意到任何明显的闪烁,因此似乎它们正在这样做,但如何实现这一点对我来说仍然是个谜。浏览器怎么会知道在执行更多绘图指令之前刷新显示?你认为它们只是计时,如果超过5毫秒或更长时间间隔没有执行画布绘制指令,就会安全地交换缓冲区吗?
这是使用图像数据的双缓冲示例。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>HTML5 Canvas Demo of PixelBuffer</title>
<style>
html,
body {
height: 100%;
width: 100%;
}
</style>
</head>
<body>
<canvas id="buffer1"></canvas>
<script>
const canvas = document.getElementById('buffer1');
const ctx = canvas.getContext('2d');
const imageData = ctx.createImageData(100, 100);
const pixelBuffer = new Uint32Array(imageData.data.buffer);
for (let i = 0; i < pixelBuffer.length; i++) {
pixelBuffer[i] = 0xFF0000FF;
}
ctx.putImageData(imageData, 0, 0);
</script>
</body>
</html>
explorercanvas
时,IE在某些情况下会闪烁,但这当然不是HTML5,而只是由VML模拟的canvas
元素。我从未见过其他浏览器这样做。 - cryo