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

How to display 2 labels in one scene?

我对 Swift 和 SpriteKit 完全陌生,抱歉我真的什么都不懂。我正在尝试在单个场景中添加 2 个连续的 SKLabelNode。场景的背景是.black。我创建了一个函数,它从 UIBezierPath 生成一个 SKShapeNode,以某种 P 形覆盖比方说屏幕的 3/4,.fill = .white。我添加 child 并结束函数。

我在 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?) {

    }
}

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

具有较高 zPosition 的节点将显示在具有较低 zPosition 的任何其他节点之上。通过为 zPosition 赋予标签节点不同的值,您可以控制哪个标签显示在上方,哪个标签显示在下方。

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

希望对您有所帮助!

感谢您的帮助。

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

有人知道原因吗?