【问题标题】:Getting absolute position of CCSprite in cocos2d在 cocos2d 中获取 CCSprite 的绝对位置
【发布时间】:2012-04-18 18:43:59
【问题描述】:

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

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

我的问题是这样的:

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

    是的!

    每个 CCNode 及其后代都可以获取相对于场景的位置:

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

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

    希望这有帮助! ^_^

    【讨论】:

    • 爱它!现在就去试试。非常感谢!
    • 获得位置很好,但是我如何确定位置发生了变化(根据物理引擎)?似乎覆盖 setPosition: 并没有这样做。 :\
    【解决方案2】:

    稍后编辑:

    当你这样做时:

    [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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      • 2017-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多