Как вывести SKSpriteNode на передний план?

Как я могу поставить SKSpriteNode перед всеми остальными узлами?

С UIView я могу использовать BringSubviewToFront, чтобы вывести uiview перед другими представлениями.


person Phuong Ly    schedule 03.10.2013    source источник


Ответы (4)


Вы не можете «вынести это на передний план», но вы можете изменить zPosition этого.

Чем выше zPosition узла, тем позже он будет отображаться.

Итак, если у вас есть три узла с zPositions из -1, 0 и 1, то -1 появится сзади. Затем 0. Затем 1 появится спереди.

Если все они используют значение по умолчанию zPosition, равное 0,0, то они отображаются в том порядке, в котором они появляются в дочернем массиве родительского узла.

Все это можно прочитать в документах.

https://developer.apple.com/documentation/spritekit/sknode

person Fogmeister    schedule 03.10.2013
comment
Спасибо за помощь. Это то, что мне нужно. Теперь я могу вывести SKSpriteNode на передний план. - person Phuong Ly; 03.10.2013
comment
вы также можете создать 2 слоя (или больше). есть один для фона, а другой для игроков и т. д. Порядок их добавления повлияет на наслоение, поэтому сначала добавьте фоновый слой. - person DogCoffee; 05.10.2013

SWIFT 4
Обычно я создаю перечисления для установки zPositions, чтобы можно было просто управлять различными слоями:

enum ZPositions: Int {
    case background
    case foreground
    case player
    case otherNodes
}
  • «фон дела» — нижняя позиция, равна позиции по умолчанию 0;
  • «Передний план дела» = 1
  • «кейс-плеер» = 2
  • «учитывать другие узлы» = 3

Таким образом, когда вы устанавливаете новый элемент, вы можете задать ему zPosition следующим образом:

button.zPosition = CGFloat(ZPosition.otherNodes.rawValue)

(у кнопки теперь самая высокая zPosition)

person DaniChi    schedule 20.02.2019

Это расширение добавляет в SKNode метод bringToFront. Это отлично подходит для тех случаев, когда zPosition неуместно, и вы хотите полагаться на порядок братьев и сестер.

extension SKNode {
    func bringToFront() {
        guard let parent = parent else { return }
        removeFromParent()
        parent.addChild(self)
    }
}

`

person Graham Perks    schedule 18.01.2017

Если вы хотите вывести узел на передний план, используйте это:

yourNode.zPosition = 1

или в самый конец:

yourNode.zPosition = -1

или на том же уровне, что и другие узлы (поскольку это значение установлено по умолчанию):

yourNode.zPosition = 0

person emido333    schedule 04.05.2017
comment
Не совсем верно. #1 - Это предполагает, что ни у кого нет zPosition выше 1, #2 - Если вы установите несколько узлов в zPosition 1, то это не решает, какой узел будет выведен на самый передний план. Я рекомендую удалить этот ответ. - person Tyler A.; 02.01.2021