Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

cocos2d convertToWorldSpace

I'm not sure convertToWorldSpace works.

  • I have spriteA which is the parent.

  • I set it to position 40,40 for example and add it to the scene.

  • I have a second spriteB which I set at position 80,80.

  • I add spriteB to spriteA.

  • I print out the position of spriteB: 80,80.

  • I then print [self convertToWorldSpace:spriteB.position]. And, I still get 80,80. Shouldn't spriteB position be different here?

like image 415
stone Avatar asked Feb 18 '11 18:02

stone


2 Answers

In your case if you want know the position of your spriteB in the current world you must call the "convertToWorldSpace" methods from its parent (the spriteA) :

[spriteA convertToWorldSpace:spriteB.position];

The "convertToWorldSpace:" method applies the node's transformation to the given position. You should always call this methods from the parent's sprite.

like image 139
Yannick Loriot Avatar answered Oct 10 '22 18:10

Yannick Loriot


ConvertToWorldSpace takes LOCAL node coordinates, and converts them to the world coordinates. ConvertToNodeSpace takes WORLD coordinates, converts them to the calling node's coordinates. (If so call [nodeA convertToWorldSpace:ccp(10,10)], it assumes that the (10,10) position is for a child of nodeA)

Basically, To get the world position of any node (in cocos2d 3 or later) use this code:

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

I personally made a function so I can use this over and over (add it to the top of any .m/.h file and you will see it)

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

And I use it like this: (myNode can be any cocos2d sprite, label or whatever)

CGPoint worldPosition=worldPosOfNode(myNode);
like image 37
Stan Tatarnykov Avatar answered Oct 10 '22 16:10

Stan Tatarnykov