Я столкнулся с проблемой с zPosition узлов на моей сцене SpriteKit.Проблема с SpriteKit с zPosition
Я создаю узел менеджера, который позволяет управлять «узлами» на узлах zPosition, по сути, позволяя вам избавиться от ручного управления свойством zPosition и вместо этого добавлять узлы с помощью методов, таких как addNodeUnder(node:SKNode)
, а также создавать группы ,
Проблема заключается в том, что с операциями я сделал, зеленый и желтый узел должен быть сверху красного узла.
Я сделал свой собственный маленький отладчик, отображающий SceneKit «графа сцены» в иерархическом порядке:
Node of type LMManagerNode has zPosition = 0.0 and has children :
Node of type LMWarpperNode has zPosition = 0.0 and has children :
Node of type SKSpriteNode ('Red node') has zPosition = 0.0.
Node of type LMWarpperNode has zPosition = -100.0 and has children :
Node of type SKSpriteNode ('Blue node') has zPosition = 0.0.
Node of type LMWarpperNode has zPosition = 100.0 and has children :
Node of type LMGroupNode ('Test group') has zPosition = 0.0 and has children :
Node of type LMWarpperNode has zPosition = -150.0 and has children :
Node of type SKSpriteNode ('Yellow node') has zPosition = 0.0.
Node of type LMWarpperNode has zPosition = -200.0 and has children :
Node of type SKSpriteNode ('Green node') has zPosition = 0.0.
Как вы можете видеть:
- Красный узел находится внутри узла, который имеет
zPosition = 0
- Синий узел содержится внутри узла, который имеет
zPosition = -100
- В желтом и зеленом узлах содержатся i Nside узел группы, сам содержится внутри узла, который имеет
zPosition = 100
Поскольку узел, который содержит красный узел имеет zPosition = 0
и узел, который содержит зеленый и желтые узлы имеет zPosition = 100
, не должен эти два узла будет наверх красного узла?
ignoresSiblingOrder
моего SKView
установлен в false
, кстати ...
EDIT: Это странно: yellowNode.zPosition = 1000 делает желтый узел идти на верхней части красного узла. Как это возможно?
EDIT # 2 Вот код моей функции отладки:
func renderNodeHieararchyForNode(node:SKNode, index:Int) {
var i = 0
var beginning = ""
while i != index {
beginning += " "
i++
if i == index {
beginning += " "
}
}
print("\(beginning)Node of type \(node.dynamicType) \(node.name != nil ? "('\(node.name!)')" : "") has zPosition = \(node.zPosition)\(node.children.count > 0 ? " and has children :" : ".")")
for (i,child) in node.children.enumerate() {
renderNodeHieararchyForNode(child, index: index+1)
if i == node.children.count-1 {
print("")
}
}
}
func renderNodeHiearchyForNode(node:SKNode) {
renderNodeHieararchyForNode(node, index: 0)
}
Как вы можете видеть, я использую только рамочные SpriteKit методы для его отображения, поэтому выход из моего отладчика, безусловно, правильно.
Я считаю, что вещи не были изменены, а узлы внутри родительских узлов больше не уважают zPosition в некотором роде, вы пробуйте установить желтые и зеленые узлы zPosition а не родители zPosition, и посмотреть, если он на вершине? – Knight0fDragon
Это проводное: 'yellowNode.zPosition = 1000' делает желтый узел на вершине красного узла. Как это возможно? –
@ TrevörAnneDenise: Вы должны показать свой код. –