35

如何将 SKSpriteNode 带到所有其他节点的前面?

使用 UIView,我可以使用 bringSubviewToFront 将 uiview 带到其他视图的前面。

4

4 回答 4

58

你不能“把它带到前面”,但你可以改变zPosition它。

节点越高,zPosition渲染越晚。

因此,如果您有三个节点zPositions分别为 -1、0 和 1,那么 -1 将出现在后面。然后是0。然后1会出现在前面。

如果它们都使用默认值zPosition0.0,那么它们将按照它们在父节点的子数组中出现的顺序呈现。

您可以在文档中阅读所有内容。

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

于 2013-10-03T09:14:59.153 回答
4

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)

于 2019-02-20T19:01:01.853 回答
1

此扩展bringToFront为 SKNode 添加了一个方法。这对于不合适的时候zPosition非常有用,并且您想依赖兄弟排序。

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

`

于 2017-01-18T00:00:59.110 回答
0

如果您想将一个节点放在最前面,请使用:

yourNode.zPosition = 1

或到最后:

yourNode.zPosition = -1

或与其他节点相同的级别(默认设置为此值):

yourNode.zPosition = 0

于 2017-05-04T16:27:52.717 回答