4

私のゲームでは、原子核を周回する電子のように、CCSprite別の軌道を周回するものがあります。CCSpriteアニメーションをもっと簡単にするために、私は核の子として電子を持っています。私がしなければならないのは、原子核を回転させることだけであり、電子は非常にうまくスイートに従います。

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

私の質問はこれです:

親に対する相対的な位置にのみアクセスするのではなく、オブジェクト、たとえば電子のシーン位置を取得する方法はありますか?

ありがとう。

4

2 に答える 2

8

はいあります!

各CCNodeとその子孫には、シーンに対する相対的な位置を取得する機能があります。

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

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

これがお役に立てば幸いです。^ _ ^

于 2012-04-18T19:01:23.210 に答える
4

後の編集:

あなたがするとき:

[aSprite convertToWorldSpace:position];

実際には、aSpriteの座標系で位置のグローバル座標を取得しています。aSpriteの位置をグローバル空間に変換する場合は、sprite.positionがすでにその親座標系にあるため、その親に変換を依頼する必要があります。

それがそれを説明することを願っています


元の回答:

私にとって、この解決策は機能しませんでした

mySpriteがシーンの子であるCCSpriteの子である2レベルの階層がありました。

結論:このコードは私にとっての問題を修正しました:

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

Solution2-正しい結果:

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

おそらく、このソリューションは誰かを助けるでしょうそしておそらく誰かがこのソリューションが他のソリューションではなく機能する理由を説明するでしょう

于 2013-10-13T16:00:59.990 に答える