2012-11-02 53 views
0

是否有任何cocos2d函數返回給定節點本地座標的父座標?它必須是相當常見的用例,但我沒有找到任何本地的cocos2d函數。有沒有?給定CCNode本地座標的父座標

我想這是這樣的。注意,我沒有測試過這個。 ;)

-(CGPoint) nodeToParent: (CGPoint) localPoint 
{ 
    CGFloat phi = -self.rotation * B2_pi/180; 
    return ccpAdd(self.position, ccpRotateByAngle(localPoint, ccp(0, 0), phi)); 
} 

回答

3

正如m.ding說......父 - > ConvertToNodeSpace().....

這是對你的解釋,所以你知道什麼時候該做什麼?

convertToWorldSpace(const CCPoint & nodePoint)將節點座標轉換爲SCREEN座標。 讓我們將layerA與錨點和位置(0,0)連接到屏幕,並在點(100,100)處在此圖層上有一個精靈。 雪碧的SCREEN coords會是什麼? - (100,100)

讓我們將layerA移至point( - 50, - 20)。雪碧的SCREEN coords是什麼? - (100-50,100-20),即(50,80) - 這就是convertToWorldSpace返回給我們,如果我們調用layerA-> convertToWorldSpace(ccp(100,100))。

convertToWorldSpaceAR - 將關係返回到錨點:所以如果我們的場景 - 根層有AP(0.5f,0.5f) - 默認,convertToWorldSpaceAR應該返回相對於屏幕中心的位置。我已經使用convertToNodeSpace

convertToNodeSpace(const CCPoint & worldPoint) - 將SCREEN座標轉換爲NODE的本地。即如果我們的例子中移動層調用: layerA-> convertToNodeSpace(ccp(50,80)) - 應該返回(100,100) - 我們的精靈節點座標。

convertToNodeSpaceAR - 與convertToWorldSpaceAR相同的邏輯

+0

假設ccNodeA是ccNodeB的子級,它是layerA的子級。然後,如果我想將ccNodeA座標ccp(50,50)作爲ccNodeB座標,我需要通過屏幕座標:localNodeACoordAsNodeBCoord = [ccNodeB convertToNodeSpace [ccNodeA convertToWorldSpace:ccp(50,50)]]。有沒有更簡單的方法? –

0

我想這

-(CGPoint) convertToWorldSpace:(CGPoint)pt 

可以做的伎倆,看看here

+0

可以嗎?我想要轉換爲父座標。如果我不完全錯誤convertToWorldSpace轉換爲屏幕座標。 –

+0

你試過了嗎?爲了轉換到屏幕座標,我看到了一個名爲'convertToWindowSpace'的方法。 – Jack

+0

是的,我想我剛纔嘗試過。但它如何工作? –

0

它看起來像你在正確的軌道上。 [node position]應該給父節點的座標空間中的節點位置,所以如果你有一個偏離[node position]的本地點,那麼你需要像你所做的那樣添加偏移量。我不確定ccpRotateByAngle是否是正確的方法,但您只需要測試它並找出結果!

1

假設你的父節點是

CCSprite* parent; 

你可以使用:

parent->convertToNodeSpace();