2011-02-18 18 views
5

No estoy seguro de que convertToWorldSpace funcione.cocos2d convertToWorldSpace

  • Tengo spriteA que es el padre.

  • Lo configuré en la posición 40,40 por ejemplo y lo agregué a la escena.

  • Tengo un segundo spriteB que configuré en la posición 80,80.

  • Agregue spriteB a spriteA.

  • Imprimo la posición de spriteB: 80,80.

  • Imprimo [self convert toToWorldSpace: spriteB.position]. Y, sigo recibiendo 80,80. ¿No debería la posición spriteB ser diferente aquí?

Respuesta

11

En su caso si desea conocer la posición de su spriteB en el mundo actual debe llamar a los métodos "convertToWorldSpace" de su padre (el spriteA):

[spriteA convertToWorldSpace: spriteB .posición];

El método "convertToWorldSpace:" aplica la transformación del nodo a la posición determinada. Siempre debe llamar a este método desde el sprite de los padres.

+0

¿Por qué lo llama de uno de los padres? – stone

+3

La escena representa el mundo, por lo que si le pides que convierta cualquier punto en su espacio, volverá a la misma posición. Por ejemplo, un punto en (80, 80) convertir en la escena volverá (80, 80). En su caso, si convierte la posición de spriteB a través del spriteA aplicará la transformación de spriteA sobre ella. Es decir, su punto en (80, 80) con una transformación de (40, 40) (en caso de que el ancho del spriteA sea de aproximadamente 40px) da una posición mundial de (120, 120). –

2

ConvertToWorldSpace toma las coordenadas del nodo LOCAL y las convierte a coordenadas mundiales. ConvertToNodeSpace toma las coordenadas WORLD, las convierte en las coordenadas del nodo que realiza la llamada. (Si es así llamar [nodeA convertToWorldSpace:ccp(10,10)], se supone que el 10,10) posición (es para un niño de nodoA)

Básicamente, para obtener la posición mundial de cualquier nodo (en cocos2d 3 o posterior) utilizar este código:

CGPoint worldPosition=[node.parent convertToWorldSpace:node.positionInPoints]; 

yo personalmente he hecho una función para que pueda usar una y otra (añadirlo a la parte superior de cualquier archivo .m/.h y usted lo verá)

static inline CGPoint 
worldPosOfNode(CCNode *node){ 
    return [node.parent convertToWorldSpace:node.positionInPoints]; 
} 

y lo uso de esta manera: (myNode puede ser cualquier sprite de cocos2d, etiqueta o lo que sea)

CGPoint worldPosition=worldPosOfNode(myNode);