在cocos2d中获得CCSprite的绝对位置

时间:2012-04-18 18:44:00

标签: objective-c ios xcode cocos2d-iphone ccsprite

在我的游戏中,我有一个CCSprite绕另一个CCSprite运行,就像围绕着原子核运行的电子一样。我有电子作为核的孩子,使动画更简单。我所要做的就是旋转原子核,电子跟随套件非常好。

但是,我的问题来自于想要让轨道动画看起来有点笨拙,要么添加类似粒子系统轨迹的东西,要么沿着电子路径添加带状效果。我不能简单地将粒子系统添加到电子本身,因为粒子不能正确地跟随,因为它们也被核旋转。如果我将粒子系统添加到self,那么它们会正确显示,但不会与它们应该跟踪的对象位于相同的位置。

我的问题是:

有没有办法获得一个物体的场景位置,比如电子,而不是只能访问它相对于它父母的位置?

感谢。

2 个答案:

答案 0 :(得分:8)

是的!

每个CCNode及其后代都能够获得相对于场景的位置:

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

这个worldCoordinate将相对于场景而不是父节点!

希望这有帮助! ^ _ ^

答案 1 :(得分:4)

以后的编辑:

当你这样做时:

[aSprite convertToWorldSpace:position];

您实际上是在aSprite坐标系中获取位置的全局坐标。如果你想将aSprite的位置转换为全局空间,你需要让它的父亲为你做翻译,因为sprite.position已经在它的父坐标系中了。

希望它能解释

<小时/> 原答案:

对我来说,这个解决方案不起作用

我有一个2级层次结构,其中mySprite是CCSprite的子级,它是场景的子级。

底线:此代码为我解决了问题:

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

这是需要我的解决方案的层次结构: myScene - &gt; mySpriteParent - &gt; 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

也许这个解决方案可以帮助某人 也许有人会解释为什么这个解决方案有效而不是其他