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