2012-04-18 43 views
4

在我的遊戲中,我有一個CCSprite,它繞過另一個CCSprite,就像繞軌道運行一個核心的電子一樣。我有電子作爲核心的一個孩子,使動畫更簡單。我所要做的就是旋轉原子核,電子隨着套件旋轉很好。在cocos2d中獲取CCSprite的絕對位置

但是,我的問題來自想要讓軌道動畫顯得有些時髦,通過添加類似粒子系統軌跡的東西或電子路徑後面的帶狀效果。我不能簡單地將一個粒子系統添加到電子本身,因爲粒子不能正確地遵循,因爲它們也正在被原子核旋轉。如果我將粒子系統添加到self,那麼它們看起來是正確的,但與它們應該跟蹤的對象不在同一位置。

我的問題是這樣的:

有沒有辦法得到一個對象的場景中的位置,比如說電子,而不是隻能夠訪問它的相對位置,它的父?

謝謝。

回答

8

是的!

每個CCNode及其後代具有以獲得相對於場景的位置的能力:

CGPoint worldCoord = [mySprite上convertToWorldSpace:mySprite.position];

這個世界座標將相對於父節點相對於場景!

希望這有助於!^_^

+0

喜歡它!現在去試試它。非常感謝! – GreenWire 2012-04-18 19:02:59

+0

美麗!非常感謝,完美地工作。 – GreenWire 2012-04-18 19:06:19

+0

這很棒,但如何確定位置發生了變化(按照物理引擎)?看起來,重寫'setPosition:'不會。 :\ – Olie 2014-09-23 22:48:17

4

稍後編輯:

當你這樣做:

[aSprite convertToWorldSpace:position]; 

你實際上得到的位置aSprite的座標系中的全局座標。如果你想將Sprite的位置翻譯成全球空間,你需要請求它的父母爲你做翻譯,因爲sprite.position已經在它的父母座標系統中。

希望它解釋它


原來的答案:

對我來說,這個解決方案沒有奏效

我有一個2級層級結構,其中mySprite上是CCSprite的的孩子,是孩子的場景。

底線:此代碼定爲我的問題:

CGPoint worldCoord = [[mySprite parent]convertToWorldSpace: mySprite.position]; 

這是需要我的解決方案層次結構: myScene - > mySpriteParent - > mySprite上

mySprite.position:29,254 
mySpriteParent.position:533,57 

解決方法1 - 錯結果:

[mySprite convertToWorldSpace: mySprite.position]:91,418 

解決方案2 - 正確的結果:

[[boxSprite parent] convertToWorldSpace:boxSprite.position]:253.5,275.5 

或許,這解決方案將幫助別人 也許有人會解釋爲什麼這個解決方案的工作,而不是其他

+0

+1這個答案更好:-) – Jonny 2014-08-13 06:35:50