【问题标题】:Xcode: Add default custom font to SKLabelNode with SwiftXcode:使用 Swift 将默认自定义字体添加到 SKLabelNode
【发布时间】:2016-02-13 20:36:43
【问题描述】:

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

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

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

【问题讨论】:

  • 为了澄清,您是否要更改所有SKLabelNodes 使用的字体?或者您是否希望将特定节点更改为远离默认节点?
  • 我想对所有这些进行更改
  • developer.apple.com/library/ios/documentation/SpriteKit/… 对 Swifty 不太熟悉,但您可以将其子类化或创建一个类别。'

标签: xcode swift sprite-kit sklabelnode


【解决方案1】:

更改一个 SKLabelNode 的字体

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

let label = SKLabelNode(fontNamed:"Chalkduster")

label.fontName = "Arial"

更改所有 SKLabelNode(s) 的字体

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

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

访问场景图

我能想到的最好方法是在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

【讨论】:

  • 我之前没有足够的时间进行测试,抱歉。只需添加它应该在每个场景中声明 SKLabelNodes 后调用。它工作得很好,漂亮的答案。谢谢! :)
猜你喜欢
  • 2021-09-04
  • 2015-08-13
  • 1970-01-01
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多