Javascript动画的效率,clearRect()?

Javascript动画的效率,clearRect()?,javascript,html,canvas,Javascript,Html,Canvas,为迎接Flash的到来,我尝试在AS3和Javascript之间进行转换 然而,有些事情让我困惑(可能是因为缺乏知识)。在Flash中,我可以创建并显式修改我在舞台上绘制的对象的物理属性。在Canvas/HTML5中,我可以使用fillText()和fillRect(),但如果不先清除整个阶段,然后重新绘制所有内容,我就无法“设置动画”,这让我觉得效率很低。除此之外,我没有对这些对象的显式访问权限,因此我可以修改它们的物理属性,而不必首先删除所有内容 我应该如何以不同的方式处理此问题?在您看到的

为迎接Flash的到来,我尝试在AS3和Javascript之间进行转换

然而,有些事情让我困惑(可能是因为缺乏知识)。在Flash中,我可以创建并显式修改我在舞台上绘制的对象的物理属性。在Canvas/HTML5中,我可以使用
fillText()
fillRect()
,但如果不先清除整个阶段,然后重新绘制所有内容,我就无法“设置动画”,这让我觉得效率很低。除此之外,我没有对这些对象的显式访问权限,因此我可以修改它们的物理属性,而不必首先删除所有内容


我应该如何以不同的方式处理此问题?

在您看到的所有位图中,必须清除或覆盖位图,包括Flash

不同之处在于,Flash为您解决了这一问题,而在画布上,您必须自己解决这一问题,或者使用一个库,例如可以平滑从Flash到HTML5画布的过渡的库

至于效率,
clearRect()
是清除画布的第二个最有效的方法。更快的方法(至少在某些浏览器中)是设置
canvas.width=canvas.width。但我不推荐它,原因有二:

  • 这是“黑客的”
  • 在所有浏览器中都不是这样的(Safari是我最后一次检查)
  • 您可以使用
    drawImage()
    而不是
    clearRect()
    ,只要不进行缩放,它的速度就太快了。当然,这只有在您打算用图像(甚至是屏幕外画布)填充背景时才有用

    还有一个
    fillRect()
    ,它并不是真正用于此用途的,而且是最慢的


    将其与
    requestAnimationFrame
    相结合,您将获得此上下文中最有效的组合。话虽如此,Canvas的瓶颈实际上是JavaScript本身,因此我建议在这里增加一些努力,以提高代码的效率。有许多令人印象深刻的演示只使用画布。

    这让我觉得效率很低
    实际上,Flash也通过每次清除屏幕来以这种方式绘制图像。你可以使用或其他类似的框架,让你更容易在
    画布上绘制和设置动画。