Canvas动画帧渲染:无限循环vs.鼠标移动触发()



好的,这是一个非常理论性的问题:我正在用HTML5画布元素编写动画。动画依赖于鼠标的移动(当鼠标休息=没有动画)。对于呈现,我看到以下选项:

  • 选项1:不断重画画布的循环(无论鼠标是否移动)
  • 选项2:通过mousemove()事件触发绘制函数(使用jQuery)

我倾向于选择2,因为渲染只在需要时处理。但是我担心一件事:如果鼠标移动得太快(特别是在较慢的机器上),迭代可能会重叠并弄乱画布(参见下面的插图)。

所以我想到了一个变通办法:

  • 选项3:使用选项2,但检查每个触发器是否已经有一个绘制迭代正在执行。如果是,则忽略触发。

但是我也看到了一些问题:在我的例子中,鼠标移动的最后一帧可能会被遗漏(因为它与之前的调用重叠)。另外,经常检查可能会降低性能(选项1中不需要)。

那么哪个选项是最好的呢?有人有这方面的经验吗?

链接到插图(还不能发布图像):https://i.stack.imgur.com/WHLDQ.png

我使用两者的组合。

我有两个全局变量(mousex,mousey)我在mousemove

上更新了这些

我有一个绘图循环,从加载开始,每n秒重复一次

编辑:这个想法是将视觉和工作代码(碰撞,得分,…)分开

绘制循环每2秒触发一次,同时在everymove

上更新鼠标移动

-循环设置得很慢,因为它显示了差异例子:jsfiddle.net/9jW3d/show/'

我选择选项2。选项1只是浪费资源。不要担心选项2重叠迭代。当前一个事件仍在运行时,DOM不会调用鼠标移动事件。

最新更新