我正在构建一个基于画布的游戏,该游戏将涉及相当数量的精灵在运动时相互重叠。我的目标是移动设备,所以性能是一个问题。
就我而言,基本上有两种方法可以为画布上的精灵设置动画:
- 擦除至少一个精灵已移动/更改的每一帧上的整个画布,然后重绘所有内容。从我所见,这听起来很标准。
- 只擦除那些已经移动/改变的精灵,只重绘那些已经移动/改变的精灵,以及那些与那些已经移动/改变的精灵重叠的精灵。擦除那些已移动/更改的精灵将从它们重叠的那些精灵中切出块,因此需要重新绘制重叠的精灵。
天真地,听起来第二种选择会产生更好的性能。更少的绘制操作等于更少的机器必须做的工作,对吧?然而,第一个选项将涉及(可能)每帧调用一次 clearRect(),而第二个选项每帧会涉及许多 clearRect() 调用(尽管每个调用都用于一个明显更小的矩形。)更不用说确定的开销了需要删除的内容以及与刚刚删除的内容重叠的内容。
所以,经过一番思考,我不确定哪个会更快。我敢肯定在某些情况下第二个会更快,我想在某些情况下第一个选项会更快。
现在有没有办法确定哪个是更快的选择?或者我最好的选择是同时实现它并进行一些基准测试?