我有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时,它对我有很大帮助。