我有一个包装器类,用于创建带有一些子节点的标签节点。这是该类的初始化:

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)

我有2个问题:
  • 即使zPosition应该将其放置在
  • 的前面,该标签也会出现在SKSpriteNode的后面。
  • SKShapeNode(只是用于平滑拐角的插图)并未全部出现在
  • 所有节点均不受重力影响

  • PS。即使将以下内容更改为true也不会更改任何内容:
     skView.ignoresSiblingOrder = false
    

    PS2。 MyNode类具有这些属性
    var node: SKLabelNode
    var speed: CGFloat = 1.0
    var word: String
    var color: UIColor
    var kind: Kind
    

    最佳答案

    假设视图控制器中的skView.ignoresSiblingOrder = true(默认设置),有些想法...

  • ignoresSiblingOrder设置为true时,Sprite Kit在确定绘制节点的顺序时会忽略同级关系。但是,它不会影响父级同级绘制顺序。
  • 在任一模式下,先绘制父级,然后渲染子级节点。通常,无论父级和子级的zPosition为何,子级都显示在父级的顶部(如果它们位于同一位置)!例外是,如果孩子的zPosition小于零。在这种情况下,子代将出现在其父代之下(即使父代的zPosition小于子代)。
  • 似乎没有设置Sprite节点的node.node.namename。如果未设置名称,则if条件将失败,并且物理主体将不会附加到node.node
  • 形状的默认设置仅在其path(在本例中为矩形)周围绘制白色边框。您应该将其视为精灵节点周围的白色轮廓。设置background.fillColor = SKColor.greenColor()将显示绿色填充的SKShapeNode
  • 关于ios - 带有不受重力影响的子级的SKLabelNode-不尊重zPosition,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31624326/

    10-16 00:48