Xcode:使用 Swift 将默认自定义字体添加到 SKLabelNode

Xcode: Add default custom font to SKLabelNode with Swift

我到处都找过了,但我只能找到如何更改 UILabel 字体,找不到任何地方教如何更改默认 SKLabelNode 字体。我如何在 Xcode 和 swift 中做到这一点?

我已经将字体添加到 Info.plist

我也试过添加一个可以更改默认字体的扩展,但也没有用

更改一个 SKLabelNode 的字体

您可能已经知道,您可以使用 fontName 属性.

更改 SKLabelNode 的字体
let label = SKLabelNode(fontNamed:"Chalkduster")

label.fontName = "Arial"

更改所有 SKLabelNode 的字体

现在,如果我没记错的话,您想为场景中的所有标签更改fontName

首先,我们需要一种简单的方法来访问场景图中的所有节点。我的意思是,不仅是场景的直接子级,还有每个子级的子级......

访问场景图

我能想到的最好的方法是在 SKNode

中实现 visit 扩展
extension SKNode {
    func visit(logic: (node:SKNode) -> ()) {
        logic(node:self)
        children.forEach { [=12=].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.