【发布时间】:2018-05-03 03:33:32
【问题描述】:
在每个动画帧之前在整个画布上反复绘制一个半不透明的黑色矩形是一种为移动形状获得残像效果的简单方法,它完全满足了我的需要 - 在一定程度上。褪色太慢,它不会一直褪色到黑色。这是一个例子:
var canv = document.createElement('canvas');
document.body.appendChild(canv);
var ctx = canv.getContext('2d');
ctx.fillStyle = 'rgba(0, 0, 0, 1)';
ctx.fillRect(0, 0, 100, 100);
ctx.fillStyle = 'rgba(255, 255, 255, 1)';
ctx.fillRect(20, 20, 60, 60);
window.requestAnimationFrame(doFade);
function doFade() {
// Never fades away completely
ctx.fillStyle = 'rgba(0, 0, 0, 0.02)';
ctx.fillRect(20, 20, 60, 60);
window.requestAnimationFrame(doFade);
}
这在我看来像是一个数值精度问题——你不能指望画布保持浮点像素值——但我不知道如何解决这个问题。
我尝试将图像读入图案,使画布空白,然后以较低的不透明度填充图案,希望可以使舍入误差对我有利,但似乎具有相同的结果。
没有读取图像数据并将低于某个阈值的任何像素设置为黑色,这将非常慢,我已经没有想法了,可以使用一些建议。
谢谢!
【问题讨论】:
-
欢迎来到 Stack Overflow。在这个站点中,提出的每个问题都必须是具体的,因此如果可能的话,可以用一个具体的答案来回答。您现在的问题(征求意见)被认为过于宽泛或基于意见。所以请您编辑它以针对一个问题(也许尝试实施您的一个想法并询问您遇到的问题)。
-
问题还是有点抽象。您能否包含一些复制您的情况的示例代码?
-
我重写了整个内容并添加了代码和 jsfiddle。一键应该足以证明问题。
-
可以用简单的counter吗?
-
不,我不明白如何在这里使用计数器。问题是画布中有一个形状不断移动并留下新的痕迹。这是需要移除的最古老的足迹,无需追踪许多历史框架。
标签: html5-canvas