Javascript动画的效率,clearRect()?
为迎接Flash的到来,我尝试在AS3和Javascript之间进行转换 然而,有些事情让我困惑(可能是因为缺乏知识)。在Flash中,我可以创建并显式修改我在舞台上绘制的对象的物理属性。在Canvas/HTML5中,我可以使用Javascript动画的效率,clearRect()?,javascript,html,canvas,Javascript,Html,Canvas,为迎接Flash的到来,我尝试在AS3和Javascript之间进行转换 然而,有些事情让我困惑(可能是因为缺乏知识)。在Flash中,我可以创建并显式修改我在舞台上绘制的对象的物理属性。在Canvas/HTML5中,我可以使用fillText()和fillRect(),但如果不先清除整个阶段,然后重新绘制所有内容,我就无法“设置动画”,这让我觉得效率很低。除此之外,我没有对这些对象的显式访问权限,因此我可以修改它们的物理属性,而不必首先删除所有内容 我应该如何以不同的方式处理此问题?在您看到的
fillText()
和fillRect()
,但如果不先清除整个阶段,然后重新绘制所有内容,我就无法“设置动画”,这让我觉得效率很低。除此之外,我没有对这些对象的显式访问权限,因此我可以修改它们的物理属性,而不必首先删除所有内容
我应该如何以不同的方式处理此问题?在您看到的所有位图中,必须清除或覆盖位图,包括Flash 不同之处在于,Flash为您解决了这一问题,而在画布上,您必须自己解决这一问题,或者使用一个库,例如可以平滑从Flash到HTML5画布的过渡的库 至于效率,
clearRect()
是清除画布的第二个最有效的方法。更快的方法(至少在某些浏览器中)是设置canvas.width=canvas.width代码>。但我不推荐它,原因有二:
这是“黑客的”
在所有浏览器中都不是这样的(Safari是我最后一次检查)
您可以使用drawImage()
而不是clearRect()
,只要不进行缩放,它的速度就太快了。当然,这只有在您打算用图像(甚至是屏幕外画布)填充背景时才有用
还有一个fillRect()
,它并不是真正用于此用途的,而且是最慢的
将其与requestAnimationFrame
相结合,您将获得此上下文中最有效的组合。话虽如此,Canvas的瓶颈实际上是JavaScript本身,因此我建议在这里增加一些努力,以提高代码的效率。有许多令人印象深刻的演示只使用画布。这让我觉得效率很低
实际上,Flash也通过每次清除屏幕来以这种方式绘制图像。你可以使用或其他类似的框架,让你更容易在画布上绘制和设置动画。