【问题标题】:CCNode's positionCCNode的位置
【发布时间】:2012-10-15 08:52:26
【问题描述】:

This post 讨论了将 CCSprite 子类化或将 CCSprite 作为成员的利弊。

假设我有一个 CCNode,它有一个 CCSprite 作为成员。
然后我将 CCNode 作为子节点添加到我的图层 并将 CCSprite 添加到 CCNode。

现在我想改变CCSprite的位置,我应该改变包含CCSprite的CCNode的位置还是CCSprite本身?

如果我改变 CCSprite 的位置,CCNode 的位置会发生什么变化?

  • 编辑
    这被认为是可接受的做法吗?
    我最好设置 CCNode 的位置并让 CCSprite 定位在 CCNode 所在的任何位置吗?

【问题讨论】:

    标签: cocos2d-iphone composition cocos2d-x ccsprite


    【解决方案1】:

    当您有多个想要与节点一起移动的精灵时,将 CCSprite 添加为 CCNode 的子节点会很有帮助。

    考虑一个玩家精灵的例子。假设您想在播放器下方放置一个阴影。将阴影精灵和玩家精灵都添加到父 CCNode 可以轻松移动它们。

    如果您有一个单独的 sprite,没有其他要随它移动的 sprite,那么您不需要 CCNode 父代。

    【讨论】:

      【解决方案2】:

      你的精灵不会发生任何事情。如果您没有将内容大小和锚点设置为精灵的容器,则节点的位置将始终等于节点的位置 (0.f, 0.f)。因此,您的精灵的位置将与其父级(0.f,0.f)相关

      【讨论】:

      • 节点的位置总是等于节点的位置(0.f, 0.f)。 ?不明白
      • 任何节点内的所有定位都是相对于它的 (0.f, 0.f) 完成的。如果您的节点有 contentSize,则 (0.f, 0.f) 将位于它的左下角。如果你的容器节点没有contentSize,可以认为它的宽高为0.f ponts。因此,在这种情况下,它的“左下”角将等于它的位置。
      【解决方案3】:

      cocos2d-x中的所有Node基本上都有一个父Node(Scene除外)。

      更改父节点的位置会将位置更改应用到其所有子节点,

      更改子节点的位置不会影响任何事情,除非该子节点有自己的子节点。

      在您的示例中,如果更改 CCSprite 位置,CCNode 的位置将保持不变。但是,如果你改变了 CCNode 的位置,同样的改变(在屏幕上移动)也会发生在 Sprite 上。

      【讨论】:

        【解决方案4】:

        你想设置精灵的位置。简单的原因是该节点可能包含其他应该能够独立于精灵移动的子节点。

        更改节点的位置根本不会影响父节点的位置。同样,更改父节点的位置根本不会更改子节点的位置。子节点位置是其父节点位置的偏移量,因此如果您移动父节点,它们将跟随,但其位置属性(相对于父节点位置)保持不变。

        【讨论】:

          【解决方案5】:

          你最好移动 CCNode 的位置,因为 CCSprite 的位置也受其父节点的影响。 虽然通过移动 CCSprite 的位置,您将在视觉上得到相同的结果(其父级未移动),但它使获取 sprite 的位置更加复杂和混乱。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-01-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多