使用UIImage imageNamed方法渲染切片的性能问题

时间:2011-04-20 02:27:47

标签: iphone objective-c xcode ios tiles

我有5个瓷砖。每个都是16x16像素,大小为8kb。它们都是使用imageNamed加载的。例如,[UIImage imageNamed:@“dirt.png”]。它们在init中加载到drawRect之外。我有一个名为“地图”的数组,它映射出这些瓷砖的位置。在DrawRect中,我有一些代码使用两个for循环呈现舞台,如下所示。

tileNum = startPoint;
for(int i = 0; i< stageHeight; i++){
    for(int ii = 0; ii< stageWidth; ii++){
        if(map[tileNum] == 0){
            [dirt drawInRect:CGRectMake(ii*tileSize, i*tileSize, tileSize, tileSize)];
        }else if(map[tileNum] ==1){
            [tree1 drawInRect:CGRectMake(ii*tileSize, i*tileSize, tileSize, tileSize)];
        }else if(map[tileNum] ==2){
            [tree2 drawInRect:CGRectMake(ii*tileSize, i*tileSize, tileSize, tileSize)];
        }else if(map[tileNum] ==3){
            [tree3 drawInRect:CGRectMake(ii*tileSize, i*tileSize, tileSize, tileSize)];
        }else if(map[tileNum] ==4){
            [tree4 drawInRect:CGRectMake(ii*tileSize, i*tileSize, tileSize, tileSize)];
        }
        tileNum++;
    }
    tileNum += (mapWidth - stageWidth);
}

模拟器中的一切都很棒,就像我想要的那样。但是当我放入设备(3GS)时,帧速率会慢下来(大约每秒1帧)。我怀疑它可能与使用imageNamed有关。或者只是因为我渲染了太多的瓷砖? (在16x16我每帧渲染600个图块,但它们是微小的文件,90%的图块是“污垢”图块)。如果是这样,创建简单的磁贴引擎的更好方法是什么?

这是我发布问题的第一次尝试。感谢任何帮助过的人。

1 个答案:

答案 0 :(得分:1)

对于这类工作,你最终可能会在纹理图集上获得比单独图像文件更好的运气。很难准确地说出那里发布的代码数量,但我猜你正在开发某种类型的游戏,这意味着你可能想要使用opengl进行绘制。

我建议以Apple的OpenGL ES Programming Guide作为起点,特别是关于Texture Data的部分,当我开始潜入gamedev时,它帮助了我很多。