我有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%是“污点”图块)。如果是这样,那么创建简单的切片引擎的更好方法是什么?

这是我首次发布问题。感谢任何帮助的人。

最佳答案

对于此类工作,与单独的图像文件相比,使用纹理图集可能会带来更好的运气。很难确切说明那里发布的代码数量,但是我猜您正在开发某种游戏,这意味着您可能希望使用opengl进行绘制。

我建议您以Apple的OpenGL ES Programming Guide为起点,尤其是Texture Data一节,当我开始研究gamedev时,它对我有很大帮助。

08-26 03:25
查看更多