【问题标题】:OS X Sprite Kit - Dirty Rects/RegionsOS X Sprite Kit - 脏矩形/区域
【发布时间】:2014-07-06 05:14:33
【问题描述】:

一些背景:

我有一个使用 OpenGL 的现有 OS X 纸牌游戏应用程序。

窗口可调整大小,并始终保持 4:3 的纵横比。

调整窗口大小时,OpenGL 视图也会相应调整大小。所有视觉元素都相应地缩放。即卡片保持它们的相对大小和彼此之间的距离。

我有兴趣将代码移至使用 Sprite Kit 或主要基于 Core Animation 层的系统。 Sprite Kit 在满足我需求的功能集方面对我更有吸引力,但是......

...我担心 Sprite Kit 的性能(或者更确切地说,不必要的性能,特别是在电池供电的 Mac 上)对于一个基本上以 60fps 的速度将相同纹理喷射到屏幕上的游戏,即使没有发生任何事情。 (大多数时候,牌是静止的,因为玩家会思考他们的下一步行动。)

为了减少所需的一些(重复性)绘图,特别是在非常大的窗口尺寸(例如 30 英寸显示器上的全屏),我对使用“脏矩形/区域”或“按需”绘图感兴趣系统。

问题:

Sprite Kit 是否提供某种脏矩形绘图系统,或者实现这种绘图系统的能力? (或者,它基本上会以 60fps 的速度一遍又一遍地绘制所有内容,而不管是否需要重绘?)

【问题讨论】:

  • CoreAnimation 在没有动画发生时不会以 60fps 的速度绘制。
  • @mahal,确实如此。这就是我考虑转向核心动画的原因。但我更喜欢 Sprite Kit 的功能集。

标签: macos core-animation sprite-kit


【解决方案1】:

SK 是一个 OpenGL 渲染器,自然每帧都会重绘其内容。然而,这并没有让它变慢。虽然 UI 框架的脏矩形绘制是一种提高性能但也降低功耗的方法,但它们必须使用这种方法,因为 UI 框架中的渲染通常要慢很多(通​​常不是硬件加速)比在 OpenGL 渲染器中。

另一方面,如果渲染场景的复杂性非常高,SK 可能会逐帧变慢。但这对于纸牌游戏来说听起来不太可能。

通常,在您编写一些代码进行测试之前,您不应该关心性能。过早的优化和所有...

【讨论】:

  • 感谢您的帮助。与其说是过早的优化,不如说是首先选择正确的绘图策略。目前,我的游戏正在以 60fps 的速度运行,但实际上并不需要如此。理想情况下,我想要 Sprite Kit 的功能,但不必以 60fps 更新……只有在实际绘制了某些东西时。用户的电池寿命/ CPU 使用率比任何事情都重要,尤其是移动用户。干杯。
  • 在这种情况下,请使用 UI 框架并远离 sprite kit、cocos2d 或其他基于 opengl 的渲染引擎 - 它们的优化更多是为了获得最佳性能而不是电池寿命
  • (我不是在这里争论,只是指出 iOS/OS X 上的所有渲染基本上都是基于 OpenGL 的。)无论如何,我认为我必须采用基于 CA 的方法来获得灵活性.干杯。
  • 是的,没错,区别主要在于屏幕内容是否每帧都被清除。 UI 框架保留渲染缓冲区并继续对其进行绘制,仅当应用程序告诉框架使特定区域无效时才清除其中的一部分。从理论上讲,游戏引擎可以采用相同的方式设计,但绝不会如此,因为假设几乎所有游戏的屏幕内容都会从根本上逐帧发生变化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
  • 2021-06-03
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2011-07-21
相关资源
最近更新 更多