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?
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.
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With