为什么我在使用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更大的纹理页面中创建我的图像列表。
感谢 丰富
答
裂开仪器和分析代码。看起来你正在绘制一个UIView,并且它们并没有真正针对游戏进行优化。由于UIViews是层次支持的,drawAtPoint:在它出现在屏幕上之前需要多次绘制图像(到屏幕外的缓冲区)。这就是说,UIImage并不是真正为游戏而设计的。关于成为UIKit的一部分,有很多开销。你不是真的有数百个。
在速度大约顺序(最慢到最快):
- 的UIImage
- CALayers(如果你需要精细的动画控制或者(如果你有几个大的图像,通常使用的)你有大约20至100瓦/图片)
- OpelGL纹理(大多数游戏应该使用)
是否在img_list参考各指数从单独的文件加载不同的纹理/图像? – Venesectrix 2009-04-13 16:01:31
哦,我忘了提到使用CGImageCreateWithImageInRect从更大的纹理页面创建的图像列表。 – Rich 2009-04-13 16:02:08