【问题标题】:Cocos2d for iOS: understanding z layersCocos2d for iOS:理解 z 层
【发布时间】:2012-09-11 07:09:22
【问题描述】:

我有一个 GameScene,其中在 z:0 处添加了敌人和玩家精灵。我在 z:-1 向 GameScene 添加了一个背景层,这对于主背景效果很好。唯一的事情是我想展示一些云,为此他们应该在 z:1 尊重玩家和敌人的精灵。

我的方法是在背景层的 z:2 处添加云,但这还不够好,因为它们仍然出现在敌人和玩家精灵的下方。

我原以为 z 值 (2) 会被添加到背景层 z 值 (-1) 中,从而导致绝对 z 值(与 GameScene 父层相比)z:1,因此高于z:0 的敌人和玩家精灵。

显然我错了。

然后我观察到,当我将精灵添加到图层时,如果在同一图层中,最后添加的精灵将显示在先前精灵的顶部(例如,在玩家精灵之后添加敌人将在玩家顶部显示敌人精灵)。我想这是避免奇怪的图形效果(两个图像混合颜色的叠加)的惯例。 这是正确的吗?

现在,我唯一的解决方案是拥有多个背景层(一个用于云层,一个用于实际背景地形),并将它们添加到 GameScene 的不同 z 水平。这是正确的吗?这样做的缺点是我必须维护逻辑上相似的类。

【问题讨论】:

    标签: background cocos2d-iphone layer


    【解决方案1】:

    这是即将发布的 Cocos2D Essential Reference 中 cocos2d 中的 sample chapter about how draw order works(更多关于此的内容,请关注我的博客)。

    以下是绘制顺序如何工作的简短摘要:

    • 其中节点具有相同的父节点:节点从最低 zOrder 到最高 zOrder 绘制
    • 其中节点具有相同的父节点和相同的 zOrder:节点按照添加为子节点的顺序绘制
    • 不同父节点的绘制顺序按其父节点的绘制顺序绘制

    最重要的是,zOrder 只影响同级别的子节点。如果场景中有两个子节点 A 和 B,并且首先绘制 A,那么 A 的所有子节点也会绘制在节点 B 下方。

    【讨论】:

    • 非常感谢!很棒,非常有用的参考资料:)。迫不及待地想看到完整版的在线权威指南:)。
    【解决方案2】:

    在按顺序绘制元素时,等于zOrder属性,我的意思是,zOrder -3的项目将在zOrder -2的项目之前绘制,zOrder 1的项目将在zOrder 0的项目之后绘制,依此类推。所有 zOrder 都在一个节点内工作,因为所有节点的内容都在它的 draw 方法中绘制。检查CCNode的visit方法,你在代码中看到了。

    因此,您可以创建不同的图层,以便能够将具有不同“深度”的游戏对象添加到您的场景中。例如背景层、障碍层、敌人和英雄层、奖励层等。

    【讨论】:

      【解决方案3】:

      Morion 清楚地回答了您对CCNodes 中的zPosition 的疑问。不过,我还想为您的第二个问题添加一个答案。

      GameScene 中有两个背景层是正确的,尤其是在云和地形不交互或不共享相同代码的情况下。恕我直言,这实际上在代码分离和模块化方面会更好。

      但是,如果您想将它们归为一类(由于某种原因),那么您所要做的就是调用:

      // Don't call this in the init, since the parent is obviously nil there...
      [[self parent] addChild:cloud z:kBackgroundLayerCloudsZ tag:kBackgroundLayerCloudsTag];
      

      请注意,我们只调用父级来添加子级,并且我们有预定义的常量来帮助我们维护图层。如果您在稍后阶段想要添加一个中间背景层,请更改常量并为新层添加一个新值。

      我经常使用这种方法,但是 TBH,我认为在你的情况下,两个类会更好。我使用这种方法的情况是当我必须将精灵分成层(为了更好的可维护性、代码分离等),同时来自不同层的精灵是交错(有时第 1 层的精灵在上面,有时第 2 层的精灵在上面)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-13
        • 2012-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多