2012-04-18 19 views
4

私のゲームでは、核を周回する電子のように、CCSpriteを公転するCCSpriteがあります。アニメーションをもっと簡単にするために、電子を核の子として持っています。私がしなければならないのは核を回転させることだけで、電子は非常にうまくスイートに続きます。cocos2dでCCSpriteの絶対位置を取得する

しかし、私の問題は、パーティクルシステムの軌跡のようなものを追加するか、電子のパスに続くリボンエフェクトを追加することによって、軌道アニメーションを少し魅力的に見せたいからです。パーティクルシステムは単に電子自体に追加することはできません。なぜならパーティクルは核にも回転しているからです。 selfにパーティクルシステムを追加すると、パーティクルシステムが正しく表示されますが、パーティクルシステムは後続するオブジェクトと同じ位置に表示されません。

私の質問はこれです:それは親だし、それは相対位置だにのみアクセスを有するとは対照的に、

は、オブジェクトのシーン位置を取得する方法があり、電子は、言いますか?

ありがとうございました。

答えて

8

はいあります。

各CCNode及びその子孫は、シーンに対する位置を取得する機能を有している:

するCGPoint worldCoord = [mySpriteがconvertToWorldSpace:mySprite.position]。

このworldCoordinateは、親ノードではなくシーンを基準にしています。

これが役に立った!^_^

+0

がそれを好きな理由多分誰かが説明します!今それを試してみる。本当にありがとう! – GreenWire

+0

美しい!!おかげさまで、完璧に動作します。 – GreenWire

+0

これはポジションを得るのに最適ですが、ポジションが(物理エンジンごとに)変更されたとはどのように判断できますか? 'setPosition:'をオーバーライドしてもそれはしません。 :\ – Olie

4

後で編集:

あなたは:

[aSprite convertToWorldSpace:position]; 

あなたが実際にaSpriteの座標系での位置のグローバル座標を取得しています。 aSpriteの位置をグローバル空間に変換する場合は、sprite.positionがすでに親座標系にあるため、変換を行うのは親である必要があります。このソリューションは

を動作しませんでした私にとって、私はmySpriteがが子供であるCCSpriteの子である2レベルの階層を持っていた

は、それはそれを


オリジナル回答を説明ホープシーンの> mySpriteParent - - > mySpriteが

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

ソリューション1 - 間違った myScene:

ボトムライン:

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

これは私のソリューションを必要として階層構造は次のとおりです。このコードは、私のために問題を修正しました結果:

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

ソリューション2 - 正しい結果:

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

はおそらく、この解決策は、誰か を助けるそして、このソリューションが動作していない他の

+0

+1この回答は良いです:-) – Jonny