在SpriteKit中,如果某些节点共享相同的zPosition
,则按照添加到场景中的顺序呈现节点,以便添加的最新节点将位于其他节点之上(只要ignoresSiblingOrder
场景属性设置为false)。
我想知道是否有办法知道SpriteKit将呈现共享相同zPosition
的节点的顺序,以便我可以给出一个明确的zPosition。
谢谢。
答案 0 :(得分:2)
当您将子项添加到actionArray = [SKAction]()
时,它会添加到actionArray.append(sKAction)
数组属性的末尾。 (至少我发现运行了一些测试)。
因此,您可以滚动给定节点的所有子节点并按SKNode
对它们进行分组。您将获得一个字典,其中children
是zPosition
,而key
是一个有序的节点列表(从最旧的插入到最近的插入)。
zPosition
value
现在,您可以按extension SKNode {
func childrenByZPosition() -> [CGFloat:[SKNode]] {
return children.reduce([CGFloat:[SKNode]]()) { (var accumulator, node) -> [CGFloat:[SKNode]] in
var list = accumulator[node.zPosition] ?? [SKNode]()
list.append(node)
accumulator[node.zPosition] = list
return accumulator
}
}
}
class Foo: SKNode {
let num: Int
init(num: Int) {
self.num = num
super.init()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override var description: String { return num.description }
}
let scene = SKScene()
let node0 = Foo(num: 0)
node0.zPosition = 1
let node1 = Foo(num: 1)
let node2 = Foo(num: 2)
node2.zPosition = 1
let node3 = Foo(num: 3)
let node4 = Foo(num: 4)
scene.addChild(node0)
scene.addChild(node1)
scene.addChild(node2)
scene.addChild(node3)
scene.addChild(node4)