2011-09-25 5 views
13

en Cocos2d Voy a reproducir una animación. La animación tiene alrededor de 12 fotogramas, y cada fotograma es bastante grande. De hecho, la versión -hd de cada fotograma es bastante grande.Cuándo usar CCSpriteBatchNode?

De todos modos, primero, lo creé poniendo los 12 fotogramas en una textura usando Zwoptex. La textura es de aproximadamente 2048x2048.

Esto es para que pueda animar un CCSprite en un CCSpriteBatchNode usando esa textura.

Pero parece que recibo una advertencia de memoria de nivel 2.

Ahora que lo pienso, no creo que se suponía que CCSpriteBatchNode se usara para un sprite. Supongo que solo fue útil si querías dibujar muchos sprites que usaran la misma textura.

Así que quiero saber: ¿Debería animar el sprite cuadro por cuadro (sin gran textura)? ¿O es posible usar esa gran textura pero de una manera diferente?

Respuesta

24

Usted tiene razón sobre CCSpriteBatchNode. CCSpriteBatchNode es como un nodo batch: si contiene elementos secundarios, los dibujará en una sola llamada OpenGL (a menudo conocida como "batch draw"), en ausencia de CCSpriteBatchNode (en este caso) se llamará todo el "batch draw" tanto tiempo como número de hijos (sprites).

Un CCSpriteBatchNode puede hacer referencia a una y solo una textura (un archivo de imagen, un atlas de textura), es decir, una hoja de sprite creada por zwoptex. Solo los CCSprites que están contenidos en esa textura se pueden agregar al CCSpriteBatchNode. Todos los CCSprites añadidos a un CCSpriteBatchNode se dibujan en una llamada de sorteo de OpenGL ES. Si los CCSprites no se agregan a un CCSpriteBatchNode, se necesitará una llamada de sorteo de OpenGL ES para cada uno, que es menos eficiente.

De acuerdo con su escenario, no tiene que usar CCSpriteBatchNode ya que solo se procesa una textura en un momento dado.

Así que quiero saber: ¿Debería animar el sprite cuadro por cuadro (sin gran textura)? ¿O es posible usar esa gran textura pero de una manera diferente?

No importa. De todos modos, cargarás la textura de 2048 x 2048. El tema a considerar es ¿por qué solo una textura de 2048 x 2048 te está dando una advertencia de nivel 2? cuántas de esas texturas estás cargando BTW 2048 x 2048 solo es compatible con iPod3G/iPhone3GS anterior (lo cual está bien).

En caso de que esté cargando muchas texturas (lo cual me parece cierto). Necesita programar alguna lógica donde pueda descargar la textura cuando no sea necesario. No mirar a los métodos siguientes:

[[CCSpriteFrameCache sharedSpriteFrameCache] removeSpriteFramesFromFile:fileName]; 
[[CCSpriteFrameCache sharedSpriteFrameCache] removeUnusedSpriteFrames]; 
[[CCTextureCache sharedTextureCache] removeUnusedTextures]; 

En lo que respecta a la animación se puede crear y utilizar esa CCAnimation o (dependiendo de su escenario) que puede utilizar setDisplayFrame (marco CCSpriteFrame);

Cuestiones relacionadas