我试图让一个数字出现在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)
但没有任何反应。如果您发现问题,请告诉我。谢谢!
答案 0 :(得分:1)
经过多次试验和错误,重新讲述SKNodes
与UIViews
的工作方式有何不同,我认为您的问题的原因如下:精灵工具包中的.position
属性不是节点角落的位置,但它的中心。此外,将SKNode
设置为另一个SKNode
的子项时,其位置基于其父级而非场景。因此,不应将numLabel
设置为midX
和midY
,而应将其设为:
numLabel.position = CGPointMake(0, 0)
但是,由于某种原因,y
值仍然不正确,至少在我使用的代码中。这可能是由于您缩放numLabel
的方式。所以我用代码解决了这个问题:
numLabel.position = CGPointMake(0, -(numLabel.frame.height / 2))
尽管如此,这并不完美。
有了这些新信息,如果你仍然无法弄清楚,我会进一步了解确切的位置。但请记住我在本文开头的回答。