1

我正在使用 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 从更大的纹理页面创建的图像列表。

谢谢丰富

4

1 回答 1

1

破解打开 Instruments 并分析您的代码。看起来您正在绘制 UIView,并且它们并未真正针对游戏进行优化。由于 UIView 是基于图层的,因此 drawAtPoint: 需要在图像出现在屏幕上之前多次绘制图像(到屏幕外缓冲区)。

话虽如此,UIImage 并不是真正为游戏设计的。作为 UIKit 的一部分有很多开销。你并不是真的要拥有数百个。

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

  • UIImage(如果你有几个大图像通常使用)
  • CALayers(如果你需要精细的动画控制或者你有大约 20 到 100 个图块/图像)
  • OpelGL 纹理(大多数游戏应该使用的)
于 2009-04-13T18:09:45.103 回答