4

在我的游戏中,我有一个CCSprite绕着另一个CCSprite运行的 ,就像一个绕着原子核运行的电子一样。我将电子作为原子核的子元素,以使动画更简单。我所要做的就是旋转原子核,电子就会很好地跟随。

然而,我的问题来自希望通过添加类似粒子系统轨迹的东西,或者跟随电子路径的带状效果,让轨道动画看起来更时髦。我不能简单地将粒子系统添加到电子本身,因为粒子不能正确跟随,因为它们也被原子核旋转。如果我将粒子系统添加到self,那么它们会正确显示,但与它们应该尾随的对象不在同一位置。

我的问题是这样的:

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

谢谢。

4

2 回答 2

8

就在这里!

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

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

这个世界坐标将相对于场景而不是父节点!

希望这有帮助!^_^

于 2012-04-18T19:01:23.210 回答
4

稍后编辑:

当你这样做时:

[aSprite convertToWorldSpace:position];

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

希望它解释它


原答案:

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

我有一个 2 级层次结构,其中 mySprite 是 CCSprite 的子节点,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

也许这个解决方案会帮助某人也许有人会解释为什么这个解决方案有效,而不是另一个

于 2013-10-13T16:00:59.990 回答