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

有帮助吗?

解决方案

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

  1. 调整观看,换句话说“移动相机”,以便内容移动。
  2. 直接移动内容,保持相机固定。
  3. 这些当然完全等同,彼此相反。

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

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

其他提示

你的图像有多大,速度有多慢?使用包含UIView的UIScrollView,其内容是通过Quartz绘制的,我已经能够平滑地滚动大小为2000 x 2000的视图。如果你不是每帧都重新绘制你的图像内容,而是移动视图的位置并让Core Animation完成其余的工作,我打赌你能够获得你想要的那种性能而不需要下载到OpenGL。

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

对于二维工作,我认为OpenGL是你用完所有其他选择之后的最后一个地方。使用简单的UIViews和Core Animation,你可以花更多的时间做同样的事情。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top