¿Por qué aparece bajo rendimiento al renderizar imágenes diferentes con UIImage en el iPhone

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

Pregunta

Estoy usando UIImage para hacer un mapa de juego de 32x32 bloques. El código es el siguiente

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];
    }
}

Esto termina la prestación de unos 150 azulejos. Mi problema es cuando corro el código Mi tiempo de render baja a 2-3 fotogramas por segundo.

pensé que el iPhone fue llenado obligado, sin embargo si fuerzo bindex a = 1 (es decir, hacer que el mismo bloque 150 veces) después consigo tasa de fotogramas completa.

No puedo creer que es tan caro para hacer de diferentes UIImages.

¿Puede alguien decirme lo que estoy haciendo mal ...

Ah se me olvidó mencionar mi lista de imágenes creado a partir de una página de textura más grandes usando CGImageCreateWithImageInRect.

Gracias Rica

¿Fue útil?

Solución

Instrumentos de grietas abiertas y el perfil de su código. Parece que se está dibujando en un UIView, y no están realmente optimizado para juegos .. Desde UIViews son respaldados por capa, drawAtPoint: tiene que dibujar la imagen varias veces (a los tampones fuera de pantalla) antes de que aparezca en la pantalla.

Una vez dicho esto, UIImage no es realmente diseñado para los juegos. Hay un montón de gastos que respecta a ser parte de UIKit. Usted no está realmente destinado a tener cientos de ellos.

A fin aprox de la velocidad (más lenta a la más rápida):

  • UIImage (normalmente utilizado si usted tiene un par de imágenes de gran tamaño)
  • CALayers (si necesita un control de animación bien o si tiene más o menos 20 a 100 azulejos / imágenes)
  • texturas OpelGL (lo que la mayoría de los juegos deben usar)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top