How to bring a SKSpriteNode to front?

怎甘沉沦 提交于 2019-12-12 07:24:34

问题


How can I bring a SKSpriteNode to the front of all other node?

With UIView, I can use bringSubviewToFront to bring an uiview in front of other views.


回答1:


You can't "bring it to front" but you can change the zPosition of it.

The higher the zPosition of the node the later it gets rendered.

So if you have three nodes with zPositions of -1, 0 and 1 then the -1 will appear at the back. Then the 0. Then 1 will appear at the front.

If they all use the default zPosition of 0.0 then they are rendered in the order they appear in the children array of the parent node.

You can read it all in the docs.

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




回答2:


SWIFT 4: I usually create enums to establish zPositions, so I can simply manage the different layers:

enum ZPositions: Int { case background case foreground case player case otherNodes }

  • “case background” is the lower position, it’s equal to the default position of 0;
  • “case foreground” = 1
  • “case player” = 2
  • “case other nodes” = 3

So, when you setup a new item, you can give it the zPosition simply this way:

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

(button now has the highest zPosition) Hope it helps...




回答3:


This extension adds a bringToFront method to SKNode. This great for times when zPosition is inappropriate, and you want to rely on sibling ordering.

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

`




回答4:


If you want to bring a node to the very front use this:

yourNode.zPosition = 1

or to the very back:

yourNode.zPosition = -1

or the same level as other nodes(as it's set to this value by default):

yourNode.zPosition = 0



来源:https://stackoverflow.com/questions/19155226/how-to-bring-a-skspritenode-to-front

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!