为什么我在使用UIImage在iPhone上渲染不同的图像时性能很差

问题描述:

我使用UIImage从32x32块渲染游戏地图。的代码如下为什么我在使用UIImage在iPhone上渲染不同的图像时性能很差

for(int x = 0; x < rwidth; ++x) 
{ 
    for(int y = 0; y < rheight; ++y) 
    { 
     int bindex = [current_map GetTileIndex:x :y]; 
     CGPoint p; 
     p.x = x * tile_size_x; 
     p.y = y * tile_size_x; 
     [img_list[bindex] drawAtPoint:p]; 
    } 
} 

这结束了渲染约150瓦。我的问题是,当我运行这段代码时,渲染时间会下降到每秒2-3帧。

我认为iPhone是充满了界限,但是如果我强制bindex = 1(即呈现相同的块150次),那么我得到全帧率。

我不敢相信从不同的UIImage渲染出来的代价很高。

可能有人请告诉我,我做错了什么......

哦,我忘了,更不用说使用CGImageCreateWithImageInRect更大的纹理页面中创建我的图像列表。

感谢 丰富

+0

是否在img_list参考各指数从单独的文件加载不同的纹理/图像? – Venesectrix 2009-04-13 16:01:31

+0

哦,我忘了提到使用CGImageCreateWithImageInRect从更大的纹理页面创建的图像列表。 – Rich 2009-04-13 16:02:08

裂开仪器和分析代码。看起来你正在绘制一个UIView,并且它们并没有真正针对游戏进行优化。由于UIViews是层次支持的,drawAtPoint:在它出现在屏幕上之前需要多次绘制图像(到屏幕外的缓冲区)。这就是说,UIImage并不是真正为游戏而设计的。关于成为UIKit的一部分,有很多开销。你不是真的有数百个。

在速度大约顺序(最慢到最快):

  • 的UIImage
  • CALayers(如果你需要精细的动画控制或者(如果你有几个大的图像,通常使用的)你有大约20至100瓦/图片)
  • OpelGL纹理(大多数游戏应该使用)