I ran into a problem with zPosition nodes in my SpriteKit scene.
I am creating a node dispatcher that allows you to "impose" like "managing zPosition nodes, essentially letting you get rid of the manual control of the zPosition property and instead add nodes using type methods addNodeUnder(node:SKNode), as well as create groups.
Here is the test scene I did:

The problem is that with the actions I performed, the green and yellow node should be on top of the red node.
I made my own little debugger, displaying the SceneKit scene graph in hierarchical order:
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.
As you can see:
- The red node is contained inside the node, which has
zPosition = 0 - The blue node is contained inside the node, which has
zPosition = -100 - node, node,
zPosition = 100
node, node, zPosition = 0, node, , zPosition = 100, node?
ignoresSiblingOrder SKView false, ...
EDIT: : yellowNode.zPosition = 1000 node node. ?
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 , .