我到处搜索,但我只能找到如何更改UILabel字体,无法找到教授如何更改默认SKLabelNode字体的任何地方。我如何使用swift在Xcode中做到这一点?
我已经将字体添加到Info.plist
我还尝试添加一个可以更改默认字体的扩展程序,但它也没有用
答案 0 :(得分:2)
您可能已经知道,您可以使用SKLabelNode
属性更改fontName
的字体。
let label = SKLabelNode(fontNamed:"Chalkduster")
label.fontName = "Arial"
现在,如果我没错,您想要更改场景中所有标签的fontName
。
首先,我们需要一种简单的方法来访问场景图中的所有节点。我的意思是,不仅是现场的直接孩子,还有孩子的孩子的每个孩子......
我能想象的最好方法是在visit
SKNode
扩展名
extension SKNode {
func visit(logic: (node:SKNode) -> ()) {
logic(node:self)
children.forEach { $0.visit(logic) }
}
}
现在SKNode
有一个visit
函数接收闭包。闭包应用于当前节点和每个子节点。然后递归重复该过程,直到有新的后代。
现在你GameScene
可以添加此代码
class GameScene: SKScene {
func changeFonts() {
visit { (node) -> () in
if let label = node as? SKLabelNode {
label.fontName = "Arial"
}
}
}
}
最后,当你准备好调用changeFonts()
时。
它应该完成这项工作。