【发布时间】:2013-10-09 22:01:00
【问题描述】:
如何将 SKSpriteNode 放在所有其他节点的前面?
使用 UIView,我可以使用 bringSubviewToFront 将 uiview 带到其他视图的前面。
【问题讨论】:
标签: objective-c sprite-kit skspritenode
如何将 SKSpriteNode 放在所有其他节点的前面?
使用 UIView,我可以使用 bringSubviewToFront 将 uiview 带到其他视图的前面。
【问题讨论】:
标签: objective-c sprite-kit skspritenode
你不能“把它带到前面”,但你可以改变它的zPosition。
节点的zPosition 越高,渲染越晚。
因此,如果您有三个节点,zPositions 分别为 -1、0 和 1,那么 -1 将出现在后面。然后是0。然后1会出现在最前面。
如果它们都使用默认的zPosition 0.0,那么它们将按照它们在父节点的子数组中出现的顺序呈现。
您可以在文档中阅读所有内容。
【讨论】:
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
【讨论】: