我已经到处搜索,但只能找到如何更改 UILabel 字体,而找不到任何教如何更改默认 SKLabelNode 字体的地方。我如何在 Xcode 中使用 swift 做到这一点?
我已经将字体添加到 Info.plist
我还尝试添加一个扩展来更改默认字体,但它也不起作用
最佳答案
更改一个 SKLabelNode 的字体
您可能已经知道,您可以使用 fontName
属性更改 SKLabelNode
的字体。
let label = SKLabelNode(fontNamed:"Chalkduster")
label.fontName = "Arial"
更改所有 SKLabelNode 的字体
现在,如果我没记错的话,您想更改场景中所有标签的fontName
。
首先,我们需要一种简单的方法来访问场景图中的所有节点。我的意思是,不仅是场景中的直接 child ,还有每个 child 的 child 的 child ......
访问场景图
我能想到的最好方法是在 SKNode
中实现 visit
扩展
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()
。
它应该可以完成这项工作。
只需记住使用 a font available in SpriteKit .
关于Xcode:使用 Swift 将默认自定义字体添加到 SKLabelNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35385036/