Ios 儿童不受重力影响的SKLabelNode-不考虑位置

Ios 儿童不受重力影响的SKLabelNode-不考虑位置,ios,sprite-kit,sklabelnode,Ios,Sprite Kit,Sklabelnode,我有一个包装器类来创建带有一些子节点的标签节点。这是类的初始值: let label = SKLabelNode(text: word) let background = SKShapeNode(rectOfSize: size, cornerRadius: 0.5) let mainNode = SKSpriteNode(color: color, size: background.frame.size) label.horizontalAlignmentMode = SKLabelHoriz

我有一个包装器类来创建带有一些子节点的标签节点。这是类的初始值:

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的后面,即使Z位置应将其置于前面
  • SKShapeNode(这只是一个用于平滑角落的插入)根本没有出现
  • 所有节点都不受重力影响
注:即使将以下内容更改为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
    时,精灵工具包在确定绘制节点的顺序时会忽略同级关系。但是,它不会影响父兄弟绘制顺序
  • 在任一模式下,首先绘制父节点,然后渲染子节点。通常,无论父项和子项的位置如何,子项都显示在父项的顶部(如果它们位于同一位置)zPositions!例外情况是,如果孩子的
    zPosition
    小于零。在这种情况下,子对象将显示在其父对象的下方(即使父对象的
    zPosition
    小于子对象)
  • 您似乎没有设置精灵节点的
    node.node.name
    name
    。如果未设置名称,则
    If
    条件将失败,物理实体将不会附加到
    节点。节点
  • 形状的默认设置仅在其
    路径
    周围绘制白色边框(在本例中为矩形)。您应该将其视为精灵节点周围的白色轮廓。设置
    background.fillColor=SKColor.greenColor()
    将显示用绿色填充的
    SKShapeNode

  • 当然,我忘了复制init的最后一行,太好了。。。。self.node=label(我在底部添加了更多信息)非常感谢,现在一切正常。我删除了SKSpriteNode,只是保留了形状,没有使用background.fillColor。我真的不认为IgnoreSisblingOrder在父母兄弟姐妹抽签顺序中的行为是这样的。
    IgnoreSisblingOrder
    在第一句和项目符号1中应该是
    true
    。我错误地将其设置为
    false
    。我已经更新了我的答案。很抱歉。