4

我正在制作一个 Sprite Kit 应用程序,并在我的场景中添加了一个 SKLabelNode。当我加载 SKScene 时,我注意到一个相当大的滞后峰值。在分析应用程序后,我发现它来自创建一个带有纸莎草字体的 SKLabelNode(尽管字体无关紧要)。当我删除标签时,场景几乎立即启动,但使用标签需要额外的 1-3 秒。

我很确定这是从加载字体开始的,因为当我返回主菜单并再次玩游戏时,它会立即再次启动。

现在有没有办法提前预加载字体,所以当玩家选择关卡时不会有大的停顿?

4

2 回答 2

13

我们遇到了这个问题,结果证明我们根本没有使用“正确”的字体名称。在我们的例子中,我们在实例化 SKLabelNode 时使用了“Menlo”而不是“Menlo-Regular”,这会导致几秒钟的损失。一旦我们使用了正确的字体名称,延迟就不再发生了。

(奇怪的是,SKLabelNode 仍然找到了 Menlo 并使用了它,因此我们并没有立即发现我们的字体名称错误。推测延迟是由于系统必须找出合适的替代品来使用。它做得很好,找到我们打算使用的字体,但需要一段时间才能完成,因此会延迟。)

于 2014-05-13T06:26:12.387 回答
3

我遇到过同样的问题。使用您的字体名称将以下代码添加到您的第一个场景:

SKLabelNode *preload = [SKLabelNode labelNodeWithFontNamed:@"Avenir"];
preload.text = @"text";

如果您不提供文本,则不会加载字体。请注意,您不需要将标签作为子项添加到场景中。

于 2014-03-29T10:10:23.533 回答