2010-10-10 9 views
10

Estoy jugando con un pequeño juego en mi iPad usando Cocos2d y me he encontrado con algunas preocupaciones de rendimiento. Tengo una imagen de 512x512 como fondo. Eso me da alrededor de 40fps con 20 sprites (en un CCSpriteBatchNode), el código para el fondo es esto:Cómo dibujar un fondo rápido en cocos2d?

CCSprite *background; 
background = [CCSprite spriteWithFile:@"oak.png" rect : CGRectMake(0, 
                    0, 
                    size.width, 
                    size.height)]; 
background.position = ccp(size.width /2 , size.height/2); 

ccTexParams params = {GL_LINEAR,GL_LINEAR,GL_REPEAT,GL_REPEAT}; 
[background.texture setTexParameters: &params]; 

Si quito el fondo llegue a 60 fps sólidos.

He intentado convertir la imagen a PVRTC y eso dio un fps extra o dos. Obtengo tasas de fotogramas idénticas usando una imagen de 1024x768 en lugar de la versión en mosaico.

Dado que mi fondo permanecerá alineado al eje, sin escala y generalmente estático. Me imagino que debería haber una manera más rápida de dibujarlo que tenerlo como un CCSprite normal?

alt text

Respuesta

6

Activa los movimientos de cocos2d de formas misteriosas. La adición de los antecedentes de una por lo demás vacío envolver CCSprite obtiene la tasa de fotogramas de nuevo hasta 60:

CCSprite *spback = [(CCSprite*)[CCSprite alloc] init]; 
[self addChild:spback]; 

CCSprite *sp = [CCSprite spriteWithFile:@"Background.png"]; 
sp.position = ccp(1024/2, 768/2); 
[spback addChild:sp]; 

Créditos para este va a yaoligang on the cocos2d forums.

+3

No te olvides de liberar automáticamente el sprite de envoltura. –

+0

Mala práctica para los tamaños de código duro, debe usar [[sprite texture] contentSize] – haawa

0

En primer lugar, usted está funcionando esto en su iPad o el simulador? Por lo general, hay una gran diferencia de rendimiento allí. Después de mirar foros donde las personas tienen problemas similares, trataría de dividir toda la imagen de 1024x768 en 2 imágenes que son 512x768. Espero que ayude.

+0

esto es todo en el hardware real. Originalmente tenía la impresión de que tener menos sprites (con una textura POT en mosaico) sería más rápido, pero cuando estoy investigando esto, parece que no es el caso. – grapefrukt

0

Intenté esto mismo con un fondo de 1024x768 y obtengo unos 60 fps incluso en depuración con un iPad. ¿Tal vez asegúrese de que su imagen no tenga canales adicionales o alfa?