自定义SKShapeNode子项未显示

时间:2015-06-28 02:24:26

标签: ios swift sprite-kit skshapenode

我试图让一个数字出现在SKShapeNode的中间。但是,出于某种原因,当我将SKLabelNode添加为形状节点的子节点时,尽管SKShapeNode确实出现,但它并未出现。我添加了与SKScene的孩子相同的标签,它看起来很好。以下是自定义类的代码:

class Dot: SKShapeNode {
    var numLabel = SKLabelNode(fontNamed: "MarkerFelt-Wide")
    func setNumber(i: Int) {
        numLabel.text = String(i)
        numLabel.fontColor = UIColor.whiteColor()
        numLabel.fontSize = 200
        numLabel.setScale(numLabel.frame.width / self.frame.width / 2)
        numLabel.position = CGPointMake(self.frame.midX ,self.frame.midY)
        self.addChild(numLabel)
    }
}

我打电话给dot.setNumber(1)但没有任何反应。如果您发现问题,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:1)

经过多次试验和错误,重新讲述SKNodesUIViews的工作方式有何不同,我认为您的问题的原因如下:精灵工具包中的.position属性不是节点角落的位置,但它的中心。此外,将SKNode设置为另一个SKNode的子项时,其位置基于其父级而非场景。因此,不应将numLabel设置为midXmidY,而应将其设为:

numLabel.position = CGPointMake(0, 0)

但是,由于某种原因,y值仍然不正确,至少在我使用的代码中。这可能是由于您缩放numLabel的方式。所以我用代码解决了这个问题:

numLabel.position = CGPointMake(0, -(numLabel.frame.height / 2))

尽管如此,这并不完美。

有了这些新信息,如果你仍然无法弄清楚,我会进一步了解确切的位置。但请记住我在本文开头的回答。