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

时间:2016-02-13 20:36:43

标签: xcode swift sprite-kit sklabelnode

我到处搜索,但我只能找到如何更改UILabel字体,无法找到教授如何更改默认SKLabelNode字体的任何地方。我如何使用swift在Xcode中做到这一点?

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

我还尝试添加一个可以更改默认字体的扩展程序,但它也没有用

1 个答案:

答案 0 :(得分:2)

更改一个SKLabelNode的字体

您可能已经知道,您可以使用SKLabelNode属性更改fontName的字体。

let label = SKLabelNode(fontNamed:"Chalkduster")

enter image description here

label.fontName = "Arial"

enter image description here

更改所有SKLabelNode

的字体

现在,如果我没错,您想要更改场景中所有标签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()时。 它应该完成这项工作。

请记得使用a font available in SpriteKit