如何将 SKSpriteNode 放在前面?
Posted
技术标签:
【中文标题】如何将 SKSpriteNode 放在前面?【英文标题】:How to bring a SKSpriteNode to front? 【发布时间】:2013-10-09 22:01:00 【问题描述】:如何将 SKSpriteNode 放在所有其他节点的前面?
使用 UIView,我可以使用 bringSubviewToFront 将 uiview 带到其他视图的前面。
【问题讨论】:
【参考方案1】:你不能“把它带到前面”,但你可以改变它的zPosition
。
节点的zPosition
越高,渲染越晚。
因此,如果您有三个节点,zPositions
分别为 -1、0 和 1,那么 -1 将出现在后面。然后是0。然后1会出现在最前面。
如果它们都使用默认的zPosition
0.0,那么它们将按照它们在父节点的子数组中出现的顺序呈现。
您可以在文档中阅读所有内容。
https://developer.apple.com/documentation/spritekit/sknode
【讨论】:
感谢您的帮助。这就是我需要的。现在我可以将 SKSpriteNode 带到背景前面了。 您也可以创建 2 个图层(或更多)。一个用于背景,另一个用于播放器等。添加这些的顺序会影响分层,因此请先添加背景层。【参考方案2】: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)
【讨论】:
【参考方案3】:这个扩展为 SKNode 添加了一个bringToFront
方法。这对于 zPosition
不合适并且您想依赖同级排序的时候非常有用。
extension SKNode
func bringToFront()
guard let parent = parent else return
removeFromParent()
parent.addChild(self)
`
【讨论】:
【参考方案4】:如果你想把一个节点放在最前面使用这个:
yourNode.zPosition = 1
或者到最后面:
yourNode.zPosition = -1
或与其他节点相同的级别(默认设置为该值):
yourNode.zPosition = 0
【讨论】:
不完全正确。 #1 - 这假设没有任何东西的 zPosition 高于 1,#2 - 如果您将多个节点设置为 zPosition 1,那么这不会决定哪个节点被带到“最前面”。我建议删除此答案。以上是关于如何将 SKSpriteNode 放在前面?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 UICollectionViewCell 放在前面?