在我的游戏中,我有一个CCSprite
绕另一个CCSprite
运行,就像围绕着原子核运行的电子一样。我有电子作为核的孩子,使动画更简单。我所要做的就是旋转原子核,电子跟随套件非常好。
但是,我的问题来自于想要让轨道动画看起来有点笨拙,要么添加类似粒子系统轨迹的东西,要么沿着电子路径添加带状效果。我不能简单地将粒子系统添加到电子本身,因为粒子不能正确地跟随,因为它们也被核旋转。如果我将粒子系统添加到self
,那么它们会正确显示,但不会与它们应该跟踪的对象位于相同的位置。
我的问题是:
有没有办法获得一个物体的场景位置,比如电子,而不是只能访问它相对于它父母的位置?
感谢。
答案 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
也许这个解决方案可以帮助某人 也许有人会解释为什么这个解决方案有效而不是其他