Perché ricevo delle prestazioni quando il rendering delle immagini differenti con UIImage su iPhone

StackOverflow https://stackoverflow.com/questions/744327

Domanda

sto usando UIImage per rendere una mappa di gioco da 32x32 blocchi. Il codice è il seguente

for( int x = 0; x < rwidth; ++x)
{
    for(int y = 0; y < rheight; ++y)
    {
        int bindex = [current_map GetTileIndex:x :y];
        CGPoint p;
        p.x = x * tile_size_x;
        p.y = y * tile_size_x;
        [img_list[bindex] drawAtPoint:p];
    }
}

Questo finisce per rendere circa 150 tessere. Il mio problema è quando si esegue questo codice il mio tempo di rendering scende a 2-3 fotogrammi al secondo.

Ho pensato che l'iPhone è stato di riempimento legato, se forzo bindex a = 1 (cioè rendere lo stesso blocco 150 volte) poi mi pieno framerate.

Non riesco a credere che è costoso per il rendering di diverse UIImages.

Qualcuno potrebbe dirmi che cosa sto facendo male ...

Ah ho dimenticato di menzionare la mia lista immagine creata da una pagina di struttura più grande usando CGImageCreateWithImageInRect.

Grazie Ricco

È stato utile?

Soluzione

Crack Strumenti aperti e il profilo del codice. Sembra che si sta disegnando in un UIView, e non sono realmente ottimizzato per i giochi .. Dal momento che sono UIViews strato-backed, drawAtPoint: ha bisogno di disegnare l'immagine più volte (a buffer fuori schermo) prima che venga visualizzato sullo schermo.

Detto questo, UIImage non è realmente progettato per i giochi. C'è un sacco di spese generali per quanto riguarda il far parte di UIKit. Non sei veramente destinata a avere centinaia di loro.

Per circa della velocità (lenta alla più veloce):

  • UIImage (di solito usato se si dispone di un paio di immagini di grandi dimensioni)
  • CALayers (se avete bisogno di controllo di animazione bene o si dispone di circa 20 a 100 piastrelle / immagini)
  • texture OpelGL (quello che dovrebbero utilizzare la maggior parte dei giochi)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top