2011-02-18 16 views
5

我不確定convertToWorldSpace的工作原理。cocos2d convertToWorldSpace

  • 我有spriteA這是父母。

  • 我將它設置爲位置40,40,並將其添加到場景中。

  • 我有第二個spriteB,我在位置80,80設置。

  • 我將spriteB添加到spriteA。

  • 我打印出spriteB的位置:80,80。

  • 然後我打印[self convertToWorldSpace:spriteB.position]。而且,我仍然得到80,80。 這裏的spriteB位置不應該不一樣嗎?

回答

11

在你的情況,如果你想知道你的spriteB在當前國際上的地位,你必須調用從其父(該spriteA)的「convertToWorldSpace」的方法:

[spriteA convertToWorldSpace:spriteB 。位置];

「convertToWorldSpace:」方法將節點的轉換應用到給定位置。你應該總是從父母的精靈中調用這個方法。

+0

你爲什麼從父母那叫它? – stone 2011-02-23 10:09:04

2

ConvertToWorldSpace取本地節點座標,並將它們轉換爲世界座標。 ConvertToNodeSpace需要WORLD座標,將它們轉換爲調用節點的座標。 (如果這樣稱呼[nodeA convertToWorldSpace:ccp(10,10)],它假定(10,10)的位置是nodeA上的孩子)

基本上,要在任何節點的世界上的地位(在cocos2d 3或更高版本)使用此代碼:

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

我個人做了一個功能,這樣我就可以在使用本及以上(將其添加到任何的.m/h文件的頂部,你會看到它)

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

我用它像這樣:(myNode可以是任何cocos2d精靈,標籤或其他)

CGPoint worldPosition=worldPosOfNode(myNode);