javascript - 什么时候清除整个 Canvas 更快?

标签 javascript html html5-canvas

我正在构建一个基于 Canvas 的游戏,该游戏将涉及相当数量的 Sprite 在运动时相互重叠。我的目标是移动设备,因此性能是一个问题。

在我的例子中,基本上有两种方法可以在 Canvas 上设置 Sprite 动画:

  1. 在至少有一个 Sprite 移动/更改的每一帧上删除整个 Canvas ,然后重绘一切。据我所知,这听起来很标准。
  2. 仅删除那些已移动/更改的 Sprite ,并仅重绘那些已移动/更改的 Sprite 以及那些与已移动/更改的 Sprite 重叠的 Sprite 。删除那些已移动/更改的 sprite 会从它们重叠的 sprite 中切出 block ,因此需要重绘重叠的 sprite。

天真地,听起来第二种选择会产生更好的性能。更少的绘制操作等于机器必须做的更少的工作,对吗?但是,第一个选项(可能)每帧调用一次 clearRect(),而第二个选项每帧调用多次 clearRect()(尽管每个调用都针对一个小得多的矩形)。更不用说确定的开销了需要删除的内容以及与刚刚删除的内容重叠的内容。

所以,经过一番思考,我不确定哪个会更快。我敢肯定在某些情况下第二个选项会更快,而且我想在某些情况下第一个选项会更快。

现在有什么方法可以确定哪个选项更快?还是我最好的选择是同时实现它并进行一些基准测试?

最佳答案

我在较小的范围内处理过同样的问题,当我意识到您可以将不同的绘制元素分离到彼此重叠的不同 Canvas 上时,我有一个拍脑袋的时刻!

一张 Canvas 用于背景,一张用于 Angular 色 Sprite 等。

查看 this question 的答案用于处理这种绘图风格的完整框架。

关于javascript - 什么时候清除整个 Canvas 更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13783691/

相关文章:

Javascript 检查数组值总是返回 -1

javascript - 单击 Angular 组件外部后无法删除事件框阴影

javascript - AngularJS 创建下拉菜单

javascript - 从多个 Controller 更新页面部分的最佳方式?

javascript - 循环遍历 Javascript 表单中的可见输入元素?

html - CSS 关键帧 - 动画在内容已经静态出现后开始

javascript - Adobe Edge Animate CC 文件结构层次结构 - 如何从不同的文件夹位置加载资源和图像(2014.1.1 版本)

javascript - Safari 中的 HTML5 视频纹理

javascript - 如何从来自 json 的视频生成缩略图?

javascript - 如何使用经典 ASP 保存 Canvas 图像?