我有5個圖塊。每個都是16x16像素,大小爲8kb。它們都使用imageNamed加載。例如,[UIImage imageNamed:@「dirt.png」]。它們在init之外的drawRect之外加載。我有一個名爲「map」的數組,用於映射這些圖塊的位置。在DrawRect中,我有一些代碼使用兩個for循環來呈現舞臺,如下所示。性能問題使用UIImage渲染圖像imageNamed方法
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。你有沒有覺得這是一個學習曲線? – 2011-04-20 19:43:52
我實際上在學校上過OpenGL課,所以從純OpenGL到OpenGL ES幾乎沒有學習曲線。查看[GLTextureAtlas](http://developer.apple.com/library/ios/#samplecode/GLTextureAtlas/Introduction/Intro.html%23//apple_ref/doc/uid/DTS40009014)以獲得絕佳的出發點。 – Sam 2011-04-21 01:03:05