2013-09-28 57 views
0

我有一個精靈,它被添加到CCSpriteBatchNode。然後我修正了精靈的位置,改變了錨點的方式,這樣我就可以圍繞這個點旋轉精靈了。關於anchorPoint轉換位置?

層次是精靈< - batchNode < - 現場

基本上精靈移動,但它.position屬性沒有改變。我需要在轉換後得到精靈的真實位置。所以我試圖用

CGPoint p = sprite.position; 
p = [sprite convertToWorldSpace:p]; 

但是,位置與我在場景中看到的精靈位置不匹配。

回答

0

Sprite位置是CCSprite中間的一個點(默認情況下)。更改定位點會移動精靈,使得該點相對於精靈移動,但相對於世界空間保持不變。例如,將精靈(例如square)的錨點更改爲ccp(0,0)將移動該正方形,以使其左下角頂點將出現在正方形中心點最初的位置。因此,儘管廣場可能似乎被「重新定位」,但它的位置(屬性)保持不變(不受錨定點變化的影響),除非有明確的改變。

編輯

如果精靈的實際位置,你的意思是它的定位點後的中點已經改變,那麼它可以通過考慮到已經應用在其上即兩個轉換來計算翻譯和旋轉。

首先,我們採取翻譯的護理:

你的精靈移動方式:

CGPoint translation; 
translation.x = sprite.contentSize.width x (0.5 - sprite.anchorPoint.x); 
translation.y = sprite.contentSize.height x (0.5 - sprite.anchorPoint.y);  

現在我們適應了變化旋轉

轉換 「翻譯」 點爲極座標我們得到

#define RADIANS_TO_DEGREES(radians) ((radians) * (180.0/M_PI)) 
r = ccpDistance(translation,ccp(0,0)); 
ø = RADIANS_TO_DEGREES(atan2(translation.x,translation.y)); //i take x/y here as i want the CW angle from y axis. 

如果你旋轉你的精靈用「d」度:

ø = ø + D; 
CGPoint transPositionAfterRotation = ccp(r * cos(ø),r * sin(ø)); 

CGPoint realPosition = ccp(sprite.position.x + transPositionAfterRotation.x, sprite.position.y +transPositionAfterRotation.y) 
+0

這並不真正發揮作用。它不考慮輪換(在我的問題中提到),這也影響到位置。在我的情況下,錨點不是中點,而是遠離精靈。 – Pablo

+0

你是什麼意思的精靈的「真實位置」? –

+0

我是指應用旋轉後的位置。 – Pablo