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

Luk*_*öhl 4 sprite scene sprite-kit skspritenode swift

我想在背景之上创建我的播放器。不知怎的,这不起作用。节点计数器增加 1,但不可见。我在添加背景后添加播放器,因此它应该位于顶部。我用来创建播放器的代码:

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)
}
Run Code Online (Sandbox Code Playgroud)

我从另一个类访问该函数,如下所示:

        person().addPlayer(self, xPos: fieldsWidth/2, yPos: fieldsWidth/2)
Run Code Online (Sandbox Code Playgroud)

希望你能帮助我。

Whi*_*ind 5

如果您确定已在所需位置添加了节点(这可能是这里的情况,因为节点计数会增加),您可以设置玩家和背景的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)
}
Run Code Online (Sandbox Code Playgroud)

关于ignoresSiblingOrder ...我建议您保留它,true因为它在性能方面可以提供很大帮助。关于这种优化的唯一“事情”是,您必须显式设置可以重叠的zPosition相同节点zPosition,但您不想让它们以随机顺序重叠(当设置为 true 时,会忽略 SiblingsOrder ),而是按确定的顺序重叠(由您控制​​)。这是来自文档:

当此属性设置为 YES 时,在确定渲染顺序时将忽略树中节点的位置。同一 z 位置处的节点的渲染顺序是任意的,并且每次渲染新帧时都可能会改变。

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