0

事实证明,使用 UIView 和 Quartz 对我的 2D 游戏来说太慢了

4

2 回答 2

0

一般来说,在OpenGL中,“滚动”基本上有两种方式,即垂直于观察方向移动显示的内容:

  1. 调整观看,即“移动相机”,使内容发生变化。
  2. 直接移动内容,保持相机固定。

这些当然是完全等价的,并且彼此相反。

这些都假设您为每一帧都重新绘制了场景。在更“经典”的意义上滚动,通过复制帧缓冲区的内容同时偏移 (dx,dy) 量,这不是一种非常适合 OpenGL 的技术。

基本上,创建一个滚动图像就像绘制一个带纹理的四边形一样简单,然后为每个新帧移动它的位置。

于 2009-03-04T07:47:30.877 回答
0

你的图像有多大,太慢有多慢?使用 UIScrollView 和包含 UIView 的内容是通过 Quartz 绘制的,我已经能够平滑地滚动视图,最大尺寸为 2000 x 2000。如果您不是每帧都重绘图像内容,而是移动视图的位置并让 Core Animation 完成其余的工作,我敢打赌,您将能够获得所需的性能,而无需使用 OpenGL。

我见过的大多数 2-D 性能问题是由于人们试图在 drawRect 中完成所有动画,不断地重绘他们的内容。您想绘制一次,然后只需移动绘制视图或图层的原点即可。视图的内容被缓存为 OpenGL 纹理,因此动画变得非常高效。

对于 2-D 工作,我认为 OpenGL 是在您用尽所有其他替代方案后最后转向的地方。使用简单的 UIViews 和 Core Animation 做同样的事情会花费你更长的时间。

于 2009-03-04T16:41:27.053 回答