SKSpriteNodeChild в неправильном zPosition

Я добавляю два SKSpriteNode в качестве дочерних к другому 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-плоскости от конца к началу

  • ParentNode
  • child1
  • child2

а иногда ожидаемый

  • child1
  • ParentNode
  • child2

Получается ли свойство zPosition переопределенным, когда дочерний элемент находится ниже parentNode? Кто-нибудь сталкивался с такой ошибкой или знает об исправлении?

В GameViewController, skView.ignoresSiblingOrder = trueКогда я установил его на falseЯ получаю первое поведение (parentNode, child1, child2) каждый раз.

2 ответа

Решение

Проблема была исправлена. Я не могу быть на 100% уверен, что это решило, поскольку я попробовал несколько вещей. Я установил ignoresSiblingOrder в false, а затем вернул в true, переместил определение childNode, появляющееся сверху, в ту же функцию, что и родительский, и, наконец (я подозреваю, что это было причиной исправления), переместил порядок addChild и установка zPosition (в моем проекте порядок был изначально child1.zPosition, parentNode.addChild; изменение порядка этих двух, вероятно, решило проблему, так как я подозреваю, что последующий порядок в братстве запутал zPosition).

Я бы рекомендовал добавить узел, который действует как контейнер, а затем добавить три других узла в качестве дочерних элементов этого узла. Таким образом, ваши три узла действуют как братья и сестры, и вы можете переставить их, если нужно, используя их zPosition,

Другие вопросы по тегам