【问题标题】:How to display 2 labels in one scene?如何在一个场景中显示 2 个标签?
【发布时间】:2019-05-02 21:56:35
【问题描述】:

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

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

    }
}

【问题讨论】:

    标签: swift sprite-kit sklabelnode


    【解决方案1】:

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

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

    更多信息在这里:https://developer.apple.com/documentation/spritekit/sknode/1483107-zposition

    希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      感谢您的帮助。

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

      有人知道原因吗?

      【讨论】:

        猜你喜欢
        • 2014-09-11
        • 1970-01-01
        • 1970-01-01
        • 2013-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多