如何在一个场景中显示2个标签?

时间:2019-05-02 21:56:36

标签: swift sprite-kit sklabelnode

我对Swift和SpriteKit完全陌生,很抱歉,我真的一无所知。我试图在一个场景中添加2个连续的SKLabelNode。场景的背景是.black。我创建了一个函数,该函数从UIBezierPath生成SKShapeNode,以某种P形(.fill = .white)覆盖了屏幕的3/4。我添加了孩子并结束了函数。

我将功能添加到didMove覆盖中。 (不要问我为什么,我正在跟踪一些示例,目前看来它是可行的。我将在稍后解决,但此刻我将重点放在当前问题上)

然后我创建第二个函数以添加2个SKLabelNode。黑色在白色部分上,白色在黑色部分上。然后将它们都添加到场景中。

我将函数添加到形状一之后。

结果是不显示白色上方的黑色。 如果我将白色注释为黑色,则前一个显示没有问题。

我试图推断addChild的顺序,但结果没有改变。

有人知道原因吗?

我尝试切换addChild

import SpriteKit

class MenuScene: SKScene {

override func didMove(to view: SKView) {
    layoutScene()
    addLabels()
}

func layoutScene() {
    backgroundColor = .black
    let rectSize = frame.size.width / 4
    //Codice per creare la scena della home
    //inizio
    let homeScreen = SKShapeNode()
    homeScreen.fillColor = .white
    let shapeHome = UIBezierPath()
    let shapeOrigin = CGPoint(x: view!.bounds.minX, y: view!.bounds.minY)
    shapeHome.move(to: shapeOrigin)
    shapeHome.addLine(to: CGPoint(x: view!.bounds.minX, y: view!.bounds.maxY))
    shapeHome.addLine(to: CGPoint(x: view!.bounds.maxX, y: view!.bounds.maxY))
    shapeHome.addLine(to: CGPoint(x: view!.bounds.maxX, y: rectSize))
    shapeHome.addLine(to: CGPoint(x: view!.bounds.maxX - rectSize, y: rectSize))
    shapeHome.addLine(to: CGPoint(x: view!.bounds.maxX - rectSize, y: view!.bounds.minY))
    shapeHome.addLine(to: CGPoint(x: view!.bounds.minX, y: view!.bounds.minY))
    shapeHome.close()
    homeScreen.path = shapeHome.cgPath
    homeScreen.fillColor = .white
    //fine
    addChild(homeScreen)
}

func addLabels() {
    let rectSize = frame.size.width / 4
    let home = SKLabelNode(text: "HOME")
    home.fontName = "AvenirNext-Bold"
    home.fontSize = 50.0
    home.fontColor = .black
    home.position = CGPoint(x: frame.midX, y: frame.midY)
    addChild(home)

    let b = SKLabelNode(text: "B")
    b.fontName = "AvenirNext-Bold"
    b.fontSize = 40.0
    b.fontColor = .white
    b.position = CGPoint(x: frame.maxX - (rectSize/2), y: rectSize/2)
    addChild(b)
}

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

    }
}

2 个答案:

答案 0 :(得分:0)

尝试更改您添加的所有节点的zPosition,例如home.zPosition = 100

zPosition较高的节点将显示在zPosition较低的任何其他节点上方。通过为标签节点指定zPosition的不同值,您可以控制上面显示的标签和下面显示的标签。

更多信息可在此处找到:https://developer.apple.com/documentation/spritekit/sknode/1483107-zposition

希望这会有所帮助!

答案 1 :(得分:0)

感谢您的帮助。

我刚刚解决了用UIColor.black和UIColor.white替换.black和.white颜色的问题。

有人知道原因吗?