在iPhone上使用UIImage渲染不同的图像时,为什么会出现性能不佳的情况

时间:2009-04-13 15:53:02

标签: iphone performance uiimage render

我正在使用UIImage从32x32块渲染游戏地图。代码如下

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次),那么我得到完全帧率。

我无法相信从不同的UIImages中渲染是那么昂贵。

有人可以告诉我我做错了什么......

哦,我忘了提到使用CGImageCreateWithImageInRect从更大的纹理页面创建的图像列表。

由于 富

1 个答案:

答案 0 :(得分:1)

破解打开仪器并分析您的代码。看起来你正在绘制一个UIView,它们并没有真正针对游戏进行优化。由于UIViews是图层支持的,因此drawAtPoint:需要在屏幕上显示之前多次绘制图像(到屏幕外缓冲区)。

话虽如此,UIImage并非真正专为游戏而设计。关于成为UIKit的一部分有很多开销。你真的不想拥有数百个。

速度的大致顺序(从最慢到最快):

  • UIImage(如果您有一些大图像,通常会使用)
  • CALayers(如果你需要精细的动画控制,或者你有大约20到100个瓷砖/图像)
  • OpelGL纹理(大多数游戏应该使用的)