如何在一个场景中显示 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 的问题。
有人知道原因吗?
我对 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 的问题。
有人知道原因吗?