需要帮助在iPhone上优化我的2D绘图

时间:2009-06-17 05:06:54

标签: iphone optimization 2d core-graphics

我正在编写一个游戏,显示56个六角形片,以电路板的形状填充屏幕。我正在使用单件渲染类绘制每个部件,当调用它来绘制一个部件时,根据传入的坐标从6个点创建一个路径。此路径用纯色填充,然后用59x59 png填充alpha到白色渐变覆盖在图纸上,使图案看起来更加闪亮。注意我目前正在使用Core Graphics。

我的第一个想法是,每次绘制时创建一个路径都是昂贵的,似乎我可以以某种方式执行此操作然后重复使用它,但我不确定最佳方法。当我看到Shark的瓶颈时,看起来png的绘图是这个过程中最费力的部分。我试过渲染png叠加层或者只是渲染没有叠加层的路径,并且两者都给了我一些帧增益,尽管删除png叠加层会产生最多的帧。

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

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

5 个答案:

答案 0 :(得分:1)

一般想法:

  • iPhone上的游戏编程通常需要OpenGL。 Core Graphics更易于使用,但OpenGL针对速度进行了优化。
  • 尽可能多地将这种“闪亮的外观”预渲染到纹理中(如:在将它们插入项目之前在Photoshop中执行)。 Alpha混合在性能上是地狱
  • 也许尝试PVRTC(也就是tutorial),因为它是iPhone GPU制造商使用的格式。然而,这可能会使事情变得更糟,这取决于你的瓶颈所在。

答案 1 :(得分:1)

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

如果你没有做太多的事情,那么OpenGL很痛苦。听起来你可以使用Core Animation并使每个tile成为一层。除非您更改某些内容,否则CA不会再次调用重绘,因此您应该只需移动该图层而不会受到重创。另请注意,CA将图层存储在纹理内存中,因此它应该更快。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

您可以尝试CGLayerCALayer

答案 4 :(得分:1)

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