2

我将两个 SKSpriteNodes 作为子节点添加到另一个 SKSpriteNode。代码如下所示:

let parentNode = SKSpriteNode(imageNamed: "ParentImage")
parentNode.position = CGPointMake(0,0)
parentNode.zPosition = 0
let child1 = SKSpriteNode(imageNamed: "ChildImage1")
child1.position = CGPointMake(0,0)
parentNode.addChild(child1)
child1.zPosition = -10
let child2 = SKSpriteNode(imageNamed: "ChildImage2")
child2.position = CGPointMake(0,0)
parentNode.addChild(child2)
child2.zPosition = 10

当我将 parentNode 添加到我的场景中时,z 平面中精灵的顺序从后到前是

  • 父节点
  • 孩子1
  • 孩子2

有时,预期的

  • 孩子1
  • 父节点
  • 孩子2

当子节点低于父节点时,zPosition 属性是否会被否决?有没有人遇到过这样的错误或知道修复?

在 GameViewController 中,skView.ignoresSiblingOrder = true 当我将其设置为 时false,我每次都会得到第一个行为(parentNode、child1、child2)。

4

2 回答 2

0

我建议添加一个充当容器的节点,然后将其他三个节点添加为该节点的子节点。这样,您的三个节点充当兄弟节点,如果需要使用它们的zPosition.

于 2015-12-21T13:01:08.010 回答
0

问题已解决。当我尝试了一些事情时,我不能 100% 确定是什么解决了它。我将 ignoresSiblingOrder 设置为 false,然后返回 true,将出现在顶部的 childNode 的定义移动到与父级相同的函数中,最后(我怀疑这是修复的原因),移动了addChild 并设置 zPosition (在我的项目中,顺序最初是child1.zPosition, parentNode.addChild; 更改这两个的顺序可能解决了问题,因为我怀疑随后的兄弟顺序混淆了 zPosition)。

于 2015-12-21T13:16:04.877 回答