Я всегда думал, что zPosition SKNode будет относительно его родителя, но прямо сейчас я испытываю противоположный эффект.zПоложение SKNode относительно его родителя?
У меня есть два родительских SKNodes в моей сцене, у которых есть zPosition 1 (node1) и 2 (node2). То, что я хочу достичь, - это то, что node2 должен ВСЕГДА быть наложенным слоем ABOVE node1. Но, к сожалению, дочерние узлы node1 (которые имеют zPosition 1-50) все слоируются над дочерними узлами node2 (которые в настоящее время не имеют zPosition). Есть ли способ решить эту проблему (за исключением того, что узел node2 занимает более 50)? Может быть, какой-то логический параметр для установки всех дочерних узлов zPosition относительно его родителя? Любая помощь будет оценена!
EDIT: Для того, чтобы сделать его более ясным, вот иерархия всех элементов:
- node1: SKNode (zPosition 1)
- child1: SKNode (zPosition 1)
- child2: SKNode (zPosition 2)
- child3: SKNode (zPosition 3)
- ...
- child50: SKNode (ЗПО sition 50)
- узел2: SKNode (zPosition 2)
- child1: SKLabelNode (без zPosition)
- child2: SKLabelNode (без zPosition)
- child3: SKLabelNode (без zPosition) не
- ...
- child50: SKLabelNode (без zPosition)
EDIT2: Вот очень сокращенный вариант моего класса GameScene:
import SpriteKit
class GameScene: SKScene {
let gameNode = SKNode()
let node1 = SKNode()
let node2 = SKNode()
let nodeSize:CGFloat = 50.0
let spacing:CGFloat = 5.0
required init(coder aDecoder: NSCoder) {
fatalError("NSCoder not supported")
}
override init(size: CGSize) {
super.init(size: size)
self.addChild(gameNode)
node1.name = "node1"
node2.name = "node2"
node1.zPosition = 1
node2.zPosition = 2
gameNode.addChild(node1)
gameNode.addChild(node2)
// add children to node1
for i in 1..<10 {
let child = SKSpriteNode(color: UIColor.redColor(), size: CGSize(width: nodeSize, height: nodeSize))
child.position = CGPointMake((nodeSize + spacing) * CGFloat(i), 0)
child.zPosition = CGFloat(i)
self.node1.addChild(child)
}
// add children to node2
for i in 1..<10 {
let child = SKLabelNode(fontNamed: "Avenir Black")
child.position = CGPoint(x: (nodeSize + spacing) * CGFloat(i), y: 0)
child.text = "label\(i)"
child.fontSize = 10
child.fontColor = UIColor.blackColor()
self.node2.addChild(child)
}
}
}
Когда вы запустите ее, вы можете увидеть, что только первый ребенок NODE2 (label1) наслаивается выше первого ребенка node1 (так как они имеют одинаковое положение z). Все остальные слои расположены под дочерними узлами node1.
Рассматривали ли вы добавление ярлыка в качестве ребенка спрайта? Вам нужно будет установить положение метки в 'CGPointZero', чтобы сделать эту работу. – 0x141E
Спасибо, но я не намерен устанавливать метки в качестве дочернего элемента спрайтов. – biedert
Почему вы хотите, чтобы узлы упорядочивались таким образом? – 0x141E