【问题标题】:Performance issue rendering tiles with UIImage imageNamed method使用 UIImage imageNamed 方法渲染图块的性能问题
【发布时间】:2011-04-20 02:27:47
【问题描述】:

我有 5 个图块。每个都是 16x16 像素,大小为 8kb。它们都是使用 imageNamed 加载的。例如,[UIImage imageNamed:@"dirt.png"]。它们在 init 中加载到 drawRect 之外。我有一个名为“map”的数组,它映射出这些瓷砖的去向。在 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% 的图块是“脏”图块)。如果是这样,创建简单的磁贴引擎的更好方法是什么?

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

【问题讨论】:

    标签: iphone objective-c xcode ios tiles


    【解决方案1】:

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

    我建议您以 Apple 的 OpenGL ES Programming Guide 为起点,尤其是 Texture Data 部分,当我开始深入研究 gamedev 时,它帮助了我很多。

    【讨论】:

    • 感谢大家的提醒。我会检查 OpenGL。您是否发现这是一个学习曲线?
    • 我实际上在学校上过 OpenGL 课,所以从普通的 OpenGL 跳到 OpenGL ES 几乎没有学习曲线。查看GLTextureAtlas 以获得一个很棒的起点。
    猜你喜欢
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多