1

我正在编写一个游戏,它显示 56 个六边形棋子以棋盘的形状填充屏幕。我目前正在使用单例渲染类绘制每一块,当调用它来绘制一块时,会根据传入的坐标从 6 个点创建一条路径。这条路径填充了纯色,然后是一个 59x59 png 和一个 alpha 到白色渐变覆盖在图纸上,使作品看起来有光泽。请注意,我目前正在 Core Graphics 中执行此操作。

我的第一个想法是每次绘制时创建一条路径成本很高,而且似乎我可以以某种方式执行一次然后重用它,但我不确定最好的方法。当我查看 Shark 的瓶颈时,看起来 png 的绘制是该过程中最费力的部分。我试过只渲染 png 叠加层或只渲染没有叠加层的路径,两者都给了我一些帧增益,尽管删除 png 叠加层会产生最多的帧。

我目前的想法是,在启动时,我应该渲染 6 条路径(我拥有的每个颜色块 1 条)并用 png 覆盖它们,然后存储这些块的图像,然后每次我需要它们时重新绘制这些块。是否有一种有效的机制来存储你曾经绘制过的东西并重新绘制它?听起来我会再次经常遇到整个绘图 png 的事情,但也许有一种不那么费力的方法可以做类似的事情......

任何建议都非常感谢。谢谢!

4

5 回答 5

1

一般想法:

  • iPhone 上的游戏编程通常需要 OpenGL。Core Graphics 更容易使用,但 OpenGL 针对速度进行了优化。
  • 尽可能多地将这种“闪亮的外观”预渲染到纹理中(例如:在将它们插入项目之前在 Photoshop 中进行)。Alpha 混合是性能的地狱
  • 也许尝试PVRTC(也是本教程),因为它是 iPhone 的 GPU 制造商使用的一种格式。再说一次,这可能会使事情变得更糟,具体取决于您的瓶颈所在。
于 2009-06-17T05:24:34.323 回答
1

如果你真的需要速度,你必须走 OpenGL 路线。如果要混合使用 OpenGL 和 Core Animation,请小心,它们可能会发生冲突。

如果你没有做太多,OpenGL 是一个痛苦。听起来您可以使用核心动画并将每个图块设为图层。除非您更改某些内容,否则 CA 不会再次调用重绘,因此您应该能够移动该图层而不会受到很大影响。另请注意,CA 将图层存储在纹理内存中,因此它应该更快。

于 2009-06-17T05:42:41.160 回答
1

其他一些人提到您应该使用 OpenGL。这是专门针对 iPhone 的精彩介绍:OpenGL ES from the Ground Up: Table of Contents

于 2009-06-17T07:22:48.713 回答
1

您可以尝试CGLayerCALayer

于 2009-06-17T07:27:36.037 回答
1

您可能还想查看cocos2d。它似乎比在我的测试中使用 CoreAnimation 快得多,并且为游戏提供了许多有用的东西。

于 2009-06-18T08:46:37.923 回答