如何向SCNNode添加标签?

时间:2018-04-01 16:41:57

标签: sprite-kit label scenekit arkit

我正在尝试向SCNNode添加标签。到目前为止,我已设法将SKLabelNode设置为SCNNode的材料。它有点工作,我可以SCNNode成为SKLabelNode的背景颜色,但我看不到文本。有时我可以看到红色的阴霾(文字颜色是红色)但没有可读的文字。

我还尝试将材质设置为UIView并添加UiLabel作为子视图。它再次设置,因为我可以整个SCNNode成为UiLabel的背景颜色,但我看不到任何文本。

var block = SCNNode()
var spriteScene = SKScene()
var Lbl = SKLabelNode()

lbl.text = “Hello World”

lbl.color = blue (playground colour literal)
lbl. = 2 //I tried various numbers
lbl.fontColor = SKColor.red
spriteScene.addChild(lbl)

1 个答案:

答案 0 :(得分:1)

经过一番打击和审判,我得到了它。在获得这些尺寸,比例和旋转以显示我想要的标签之前,我必须尝试不同的值。
注意:我的节点是SCNPlane,宽度为0.3,高度为0.2,因此SKScene的大小和矩形以及标签的位置都是相应的硬编码。

func addLabel(text: String){
    let sk = SKScene(size: CGSize(width: 3000, height: 2000))
    sk.backgroundColor = UIColor.clear

    let rectangle = SKShapeNode(rect: CGRect(x: 0, y: 0, width: 3000, height: 2000), cornerRadius: 10)
    rectangle.fillColor = UIColor.black
    rectangle.strokeColor = UIColor.white
    rectangle.lineWidth = 5
    rectangle.alpha = 0.5

    let lbl = SKLabelNode(text: text)
    lbl.fontSize = 160
    lbl.numberOfLines = 0
    lbl.fontColor = UIColor.white
    lbl.fontName = "Helvetica-Bold"
    lbl.position = CGPoint(x:1500,y:1000)
    lbl.preferredMaxLayoutWidth = 2900
    lbl.horizontalAlignmentMode = .center
    lbl.verticalAlignmentMode = .center
    lbl.zRotation = .pi

    sk.addChild(rectangle)
    sk.addChild(lbl)

    let material = SCNMaterial()
    material.isDoubleSided = true
    material.diffuse.contents = sk
    node.geometry?.materials = [material]
    node.geometry?.firstMaterial?.diffuse.contentsTransform = SCNMatrix4MakeScale(Float(1), Float(1), 1)
    node.geometry?.firstMaterial?.diffuse.wrapS = .repeat
    node.geometry?.firstMaterial?.diffuse.wrapS = .repeat
}