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

标签 xcode swift sprite-kit sklabelnode

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

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

我还尝试添加一个扩展来更改默认字体,但它也不起作用

最佳答案

更改一个 SKLabelNode 的字体

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

let label = SKLabelNode(fontNamed:"Chalkduster")

enter image description here

label.fontName = "Arial"

enter image description here

更改所有 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/

相关文章:

objective-c - 如何在 Xcode 的调试器窗口中禁用程序集?

iphone - 我想在IOS中画一个类似矩形的形状,带有可拖动的角

xcode - 从 JavaScript 调用 swift 方法挂起 xcode 和应用程序

ios - 将 UIButton 图像从一个图像过渡到另一个图像

ios - 触摸时删除 SKSpriteNode

ios - Objective-C SpriteKit – 如何制作圆形按钮

ios - Xcode 9 中的 "This function declaration is not a prototype"警告

ios - 尝试将 NSDate 转换为字符串时获取下一个日期

Swift-使用完成处理程序更新闭包外部的全局变量

ios - 为什么我不能在函数更新中调用函数?