Как я могу поставить SKSpriteNode перед всеми остальными узлами?
С UIView я могу использовать BringSubviewToFront, чтобы вывести uiview перед другими представлениями.
Как я могу поставить SKSpriteNode перед всеми остальными узлами?
С UIView я могу использовать BringSubviewToFront, чтобы вывести uiview перед другими представлениями.
Вы не можете «вынести это на передний план», но вы можете изменить zPosition
этого.
Чем выше zPosition
узла, тем позже он будет отображаться.
Итак, если у вас есть три узла с zPositions
из -1, 0 и 1, то -1 появится сзади. Затем 0. Затем 1 появится спереди.
Если все они используют значение по умолчанию zPosition
, равное 0,0, то они отображаются в том порядке, в котором они появляются в дочернем массиве родительского узла.
Все это можно прочитать в документах.
https://developer.apple.com/documentation/spritekit/sknode
SWIFT 4
Обычно я создаю перечисления для установки zPositions, чтобы можно было просто управлять различными слоями:
enum ZPositions: Int {
case background
case foreground
case player
case otherNodes
}
Таким образом, когда вы устанавливаете новый элемент, вы можете задать ему zPosition следующим образом:
button.zPosition = CGFloat(ZPosition.otherNodes.rawValue)
(у кнопки теперь самая высокая zPosition)
Это расширение добавляет в SKNode метод bringToFront
. Это отлично подходит для тех случаев, когда zPosition
неуместно, и вы хотите полагаться на порядок братьев и сестер.
extension SKNode {
func bringToFront() {
guard let parent = parent else { return }
removeFromParent()
parent.addChild(self)
}
}
`
Если вы хотите вывести узел на передний план, используйте это:
yourNode.zPosition = 1
или в самый конец:
yourNode.zPosition = -1
или на том же уровне, что и другие узлы (поскольку это значение установлено по умолчанию):
yourNode.zPosition = 0