2009-12-12 11 views
5

que estoy tratando de colocar una serie de sprites en una capa, pero como yo quiero mover todos los sprites como un grupo, he creado un CocosNode, ponerlo en la misma tamaño como la pantalla y colóquelo en el centro de la pantalla, luego agregue los Sprites a ese nodo (lightNode) en lugar de agregarlos a la capa.Cocos2d - múltiples sprites en el nodo padre no capa

Lo que estoy viendo es que los sprites no aparecen en las correctas (misma?) Posiciones en comparación a cuando los coloco en una capa y no en el lightNode.

Hice un programa de prueba para mostrar el problema utilizando la plantilla de la aplicación XCode Cocos2d "Hello World" - Luego reemplacé el método -init() de la clase HelloWorld en HelloWorldScene.m con este código.

-(id) init 
{ 
    if((self=[super init])) 
    { 
     // create my parent node that will contain all the related sprites 
     lightPane = [[CocosNode alloc] init]; 
     CGSize paneSize = { 480, 320 }; 
     [lightPane setContentSize:paneSize]; 
     [lightPane setPosition:ccp(240, 160)]; 

     // add pane to layer  
     [self addChild:lightPane z:0]; 

     // add a series of sprites to demonstrate the problem 
     int y = 40; 
     int x; 
     for (x=30; x<300; x+=20) 
     { 
      Sprite *sp = [Sprite spriteWithFile:@"pause.png"]; 
      [sp setPosition:ccp(x, y)]; 

      NSLog(@"Next sprite at position (%d, %d)", x, y); 

      [lightPane addChild:sp z:1]; 
      //[self addChild:sp z:1]; 
      x+= 20; 
     } 
    } 
    return self; 
} 

Este código hace referencia a un archivo PNG llamado "pause.png" - acaba de tomar cualquier pequeña imagen sobre píxeles 30x30 de tamaño y colocarlo en este proyecto para ejecutarlo.

Lo que verán es que los sprites aparecen a media altura de la pantalla, comenzando en el centro y en dirección hacia el lado derecho.

Si comenta la línea agregando el sprite a lightPane, y deja de comentar la línea debajo de él, y vuelve a ejecutar la muestra, verá que los sprites (correctamente) aparecen en los coords que deberían.

Obviamente, esto tiene algo que ver con la CocosNode estoy usando como un padre para los sprites. ¿Alguien ve lo que estoy haciendo mal aquí?

+0

pregunta bien formada, y el buen ejemplo de código! +1 – nash

Respuesta

3

Quiere establecer la posición de lightPane en . La posición no está centrada por defecto, es la esquina inferior izquierda.

+0

¡Doh! Por alguna razón, esperaba que el CocosNode se comportara como un Sprite, que creo que tiene su anclaje en el centro. De cualquier manera, tienes razón, necesita estar en una posición de 0,0 no en el centro. ¡Gracias! –

+1

O BIEN - configuré el nodo lightPane para anclar en 0.5,0.5. Podría jurar que probé esto antes y no funcionó. Pero, creo que lo que hice fue establecer el anclaje en 240,160 y no en .5, .5 - resulta que el anclaje es proporcional al tamaño del contenido, no es un punto absoluto, por lo que .5, .5 significa la mitad de la altura y la mitad del ancho –

+0

Creo que los sprites tienen una posición de anclaje central para que las acciones se comporten como se espera. p.ej. imagina girar un sprite y hacer que gire desde la esquina inferior izquierda. –

0

Tenga en cuenta que si se muda a un atlas de sprites, esto no funcionará. No, a menos que cambie a la nueva versión de Cocos2d (1.9, que está en beta). La versión 1.9 le permitirá hacer crianza compleja de atlas sprites.

Cuestiones relacionadas