2015-12-21 57 views
2

我将两个SKSpriteNodes作为子元素添加到另一个SKSpriteNode。代码如下所示:SKSpriteNodeChild在错误的位置

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平面精灵的顺序,从后到前是

  • parentNode
  • child1
  • 的child2

有时,预期

  • child1
  • parentNode
  • 的child2

是否当一个孩子是parentNode低于z位置属性获得过统治?有没有人遇到过这样的错误或知道修复?

在GameViewController,skView.ignoresSiblingOrder = true 当我将它设置为false,我得到的第一个行为(parentNode,child1,的child2)每次。

+0

@ShaneOSeasnain我试着运行你的代码几次(模拟器和设备),我不能产生你在说什么(我总是得到child1,parentNode,child2)。我在iOS 9.1和Xcode 7.1.1上 – Whirlwind

回答

0

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

0

我会建议添加一个充当容器的节点,然后将其他三个节点添加为该节点的子节点。这样,你的三个节点就像兄弟姐妹一样,如果需要使用他们的zPosition,你可以重新排列它们。