Children 的 SKLabelNode 不受重力影响 - 不考虑 zPosition
SKLabelNode with Children not affected by gravity - not respecting zPosition
我有一个包装器 class 来创建一个带有一些子节点的标签节点。这是 class:
的初始化
let label = SKLabelNode(text: word)
let background = SKShapeNode(rectOfSize: size, cornerRadius: 0.5)
let mainNode = SKSpriteNode(color: color, size: background.frame.size)
label.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.Center
label.verticalAlignmentMode = SKLabelVerticalAlignmentMode.Center
label.addChild(background)
label.addChild(mainNode)
mainNode.zPosition = 1
background.zPosition = 2
label.zPosition = 5
self.node = label
在我的主场景中,我实例化了节点,设置了它的物理体并设置了场景的重力:
self.physicsWorld.gravity = CGVectorMake( 0, -10 );
let node = MyNode()
node.node.zPosition = 99
node.node.position.y = endOfScreenTop
if let name = node.node.name as String!, let sprite = node.node.childNodeWithName(name) as? SKSpriteNode {
node.node.physicsBody = SKPhysicsBody(rectangleOfSize: sprite.size)
node.node.physicsBody!.mass = 1.0;
node.node.physicsBody!.angularDamping = 0.0;
node.node.physicsBody!.linearDamping = 0.0;
node.node.physicsBody!.friction = 0.0;
node.node.physicsBody!.affectedByGravity = true
node.node.physicsBody!.dynamic = true
node.node.physicsBody!.allowsRotation = false
}
addChild(node.node)
我有两个问题:
- 标签出现在 SKSpriteNode 的后面,即使 zPosition 应该把它放在前面
- SKShapeNode(只是平滑角的插图)根本没有出现
- None 个节点受重力影响
PS。即使将以下内容更改为 true 也不会改变任何内容:
skView.ignoresSiblingOrder = false
PS2。 MyNode class 具有这些属性
var node: SKLabelNode
var speed: CGFloat = 1.0
var word: String
var color: UIColor
var kind: Kind
假设 skView.ignoresSiblingOrder = true
在视图控制器中(默认设置),一些想法...
- 当
ignoresSiblingOrder
设置为true
时,Sprite Kit在确定绘制节点的顺序时会忽略兄弟关系。但是,它不会影响 parent-sibling 绘制顺序。
- 在任一模式下,先绘制 parent,然后渲染 child 节点。通常,children 出现在 parent 的顶部(如果它们在同一位置),而不管 parent 和 [=36= 的
zPosition
s ]仁!例外情况是 child 的 zPosition
小于零。在这种情况下,child 将出现在其 parent 下方(即使 parent 的 zPosition
小于 child)。
- 您似乎没有设置
node.node.name
也没有设置 sprite 节点的 name
。如果未设置名称,if
条件将失败并且物理体将不会附加到 node.node
.
- 形状的默认设置仅在其
path
(在本例中为矩形)周围绘制白色边框。您应该将其视为精灵节点周围的白色轮廓。设置 background.fillColor = SKColor.greenColor()
将显示 SKShapeNode
填充绿色。
我有一个包装器 class 来创建一个带有一些子节点的标签节点。这是 class:
的初始化let label = SKLabelNode(text: word)
let background = SKShapeNode(rectOfSize: size, cornerRadius: 0.5)
let mainNode = SKSpriteNode(color: color, size: background.frame.size)
label.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.Center
label.verticalAlignmentMode = SKLabelVerticalAlignmentMode.Center
label.addChild(background)
label.addChild(mainNode)
mainNode.zPosition = 1
background.zPosition = 2
label.zPosition = 5
self.node = label
在我的主场景中,我实例化了节点,设置了它的物理体并设置了场景的重力:
self.physicsWorld.gravity = CGVectorMake( 0, -10 );
let node = MyNode()
node.node.zPosition = 99
node.node.position.y = endOfScreenTop
if let name = node.node.name as String!, let sprite = node.node.childNodeWithName(name) as? SKSpriteNode {
node.node.physicsBody = SKPhysicsBody(rectangleOfSize: sprite.size)
node.node.physicsBody!.mass = 1.0;
node.node.physicsBody!.angularDamping = 0.0;
node.node.physicsBody!.linearDamping = 0.0;
node.node.physicsBody!.friction = 0.0;
node.node.physicsBody!.affectedByGravity = true
node.node.physicsBody!.dynamic = true
node.node.physicsBody!.allowsRotation = false
}
addChild(node.node)
我有两个问题:
- 标签出现在 SKSpriteNode 的后面,即使 zPosition 应该把它放在前面
- SKShapeNode(只是平滑角的插图)根本没有出现
- None 个节点受重力影响
PS。即使将以下内容更改为 true 也不会改变任何内容:
skView.ignoresSiblingOrder = false
PS2。 MyNode class 具有这些属性
var node: SKLabelNode
var speed: CGFloat = 1.0
var word: String
var color: UIColor
var kind: Kind
假设 skView.ignoresSiblingOrder = true
在视图控制器中(默认设置),一些想法...
- 当
ignoresSiblingOrder
设置为true
时,Sprite Kit在确定绘制节点的顺序时会忽略兄弟关系。但是,它不会影响 parent-sibling 绘制顺序。 - 在任一模式下,先绘制 parent,然后渲染 child 节点。通常,children 出现在 parent 的顶部(如果它们在同一位置),而不管 parent 和 [=36= 的
zPosition
s ]仁!例外情况是 child 的zPosition
小于零。在这种情况下,child 将出现在其 parent 下方(即使 parent 的zPosition
小于 child)。 - 您似乎没有设置
node.node.name
也没有设置 sprite 节点的name
。如果未设置名称,if
条件将失败并且物理体将不会附加到node.node
. - 形状的默认设置仅在其
path
(在本例中为矩形)周围绘制白色边框。您应该将其视为精灵节点周围的白色轮廓。设置background.fillColor = SKColor.greenColor()
将显示SKShapeNode
填充绿色。