SpriteKit:节点在另一个节点之上

SpriteKit: Node On Top Of Another Node

我想在背景之上创建我的播放器。不知何故,这是行不通的。节点计数器加一,但不可见。我在添加背景后添加了播放器,所以它应该在最上面。我用来创建播放器的代码:

var player = SKSpriteNode()

func addPlayer(gameScene: GameScene, xPos: CGFloat, yPos: CGFloat){
    player = SKSpriteNode(imageNamed: "player")
    player.size = CGSize(width: fieldsWidth, height: fieldsWidth)
    player.position = CGPoint(x: xPos, y: yPos)
    gameScene.addChild(player)
}

然后我像这样从另一个 class 访问函数:

        person().addPlayer(self, xPos: fieldsWidth/2, yPos: fieldsWidth/2)

希望你能帮助我。

在场景的视图控制器中,设置skView.ignoresSiblingOrder = false

如果你确定你已经在想要的位置添加了节点,这可能是这里的情况,因为节点数增加了,你可以设置播放器和背景的zPosition让播放器在背景之上:

var player = SKSpriteNode()

//1. somewhere in your code set background's zPosition to 1 before you add it to the scene

func addPlayer(gameScene: GameScene, xPos: CGFloat, yPos: CGFloat){
    player = SKSpriteNode(imageNamed: "player")

    //2. Set player's zPosition to be higher than background's zPosition
    player.zPosition = 2 
    player.size = CGSize(width: fieldsWidth, height: fieldsWidth)
    player.position = CGPoint(x: xPos, y: yPos)
    gameScene.addChild(player)
}

关于 ignoresSiblingOrder...我建议您将其留给 true,因为它对性能有很大帮助。关于这种优化的唯一 "thing" 是你必须显式设置 zPosition 相同 zPosition 的节点可以重叠,但你不想让它们以随机顺序重叠(当设置为 true 时 ignoresSiblingsOrder 会这样做),而是按确定的顺序重叠(由您控制​​)。这是来自文档:

When this property is set to YES, the position of the nodes in the tree is ignored when determining the rendering order. The rendering order of nodes at the same z position is arbitrary and may change every time a new frame is rendered.

所以,只要显式设置 zPosition 就可以了。