如何将SKSpriteNode带到前面?

时间:2013-10-03 09:11:48

标签: objective-c sprite-kit skspritenode

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

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

4 个答案:

答案 0 :(得分:49)

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

节点zPosition越高,呈现的越晚。

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

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

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

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

答案 1 :(得分:3)

SWIFT 4: 我通常创建枚举来建立zPosition,因此我可以简单地管理不同的层:

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

  • “案例背景”位于较低位置,等于默认位置0;
  • “案例前景” = 1
  • “案例播放器” = 2
  • “案例其他节点” = 3

因此,当您设置新项目时,可以通过以下方式简单地为其赋予zPosition:

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

(按钮现在具有最高的zPosition) 希望对您有帮助...

答案 2 :(得分:1)

此扩展程序向SKNode添加bringToFront方法。这在zPosition不合适的时候非常棒,而且你想依赖兄弟订购。

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

`

答案 3 :(得分:0)

如果您想将节点带到最前面,请使用:

yourNode.zPosition = 1

或者直到后面:

yourNode.zPosition = -1

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

yourNode.zPosition = 0