【问题标题】:kineticjs layers redraw optimizationKineticJS层重绘优化
【发布时间】:2013-04-07 09:33:50
【问题描述】:

背景:我正在使用 kineticjs 开发一款实时多人 html5 画布游戏,主要在手机浏览器上播放。游戏中发生了很多事情,例如每秒与服务器的套接字通信,使用基于服务器响应的 kineticjs 重绘和动画,所有这些都在繁重的图形界面之上。该游戏在桌面浏览器中运行良好,但在手机上运行缓慢。所以,我需要找到所有可以优化代码的方法。

我的问题,

  1. 假设我需要根据刚刚从服务器收到的服务器响应重绘屏幕的特定部分,我是否应该将这些需要重绘的元素保留在单独的层中,以便我需要重绘更少的元素。就我而言,我需要每秒钟重新绘制一次,这会导致性能提升吗?

  2. 如果上面的答案是肯定的,那么我应该划分布局的最佳层数是多少。我问这个是因为屏幕上有很多不同的部分需要根据不同的服务器响应重新绘制(尽管不是同时),如果所有这些都需要放在单独的层中,我需要知道如何到目前为止,我可以扩展上面的逻辑,例如,我可以在不牺牲性能的情况下拥有 10 个不同的层,而这正是所有这些练习的目标。

【问题讨论】:

  • 我同意@markE。我自己创建了一个简单的 HTML5 游戏,以移动设备为目标,我不得不说,要么将游戏开发为原生 Android/iOS 代码,要么使用专门设计的 HTML5 框架。游戏,例如 ImpactJS 或 LimeJS。不要误会我的意思,我喜欢 KineticJS,并且一直在这里为问题提供答案,但对于游戏,您只需要考虑到这一点而专门构建的东西。
  • @EliteOctagon:+1 用于查找和使用适合工作的工具。

标签: html5-canvas kineticjs


【解决方案1】:

Eric Rowell(KineticJS 的创建者)在这里做了一些压力测试:http://www.html5canvastutorials.com/labs/html5-canvas-kineticjs-drag-and-drop-stress-test-with-1000-shapes/

他这样说:

“创建 10 个图层,每个图层包含 1000 个形状以创建 10,000 个形状。这极大地提高了性能,因为从图层中删除一个圆圈时,一次只需要绘制 1,000 个形状,而不是全部 10,000 个形状。”

“请记住,层数过多也会降低性能。我发现使用 10 个层,每个层由 1,000 个形状组成,其性能优于 20 个层和 500 个形状或 5 个层和 2,000 个形状。”

所以你的收获是

1.是的,可以采用多个画布层来隔离不同的可重绘对象组。

还有,

2.为了优化权衡(多个画布的开销与 1 个画布的简单性),您需要在它们将在其中运行的环境中使用自己的特定代码进行测试

祝你的游戏好运:)

【讨论】:

  • 我担心最好的答案是自己做家庭作业 :)
  • 是否可以只绘制最近更新的区域,而不是整个图层?
猜你喜欢
  • 2014-08-20
  • 1970-01-01
  • 2012-12-21
  • 2013-12-03
  • 2013-07-15
  • 2014-05-17
  • 2012-12-20
  • 1970-01-01
  • 2012-10-30
相关资源
最近更新 更多