我正在制作一个Sprite Kit应用程序,在我的场景中我添加了一个SKLabelNode。当我加载SKScene时,我注意到一个非常大的滞后尖峰。在分析应用程序后,我发现它来自创建一个带有纸莎草字体的SKLabelNode(尽管字体无关紧要)。当我删除标签时,场景几乎立即启动,但使用标签需要额外的1-3秒。
我很确定这是从加载字体开始,当我回到主菜单并再次玩游戏时,它会立即重新启动。
现在有没有办法提前预加载字体,所以当玩家选择等级时没有大的停顿?
答案 0 :(得分:13)
我们遇到了这个问题,结果发现我们根本就没有使用“正确”的字体名称。在我们的例子中,我们在实例化我们的SKLabelNode时使用“Menlo”而不是“Menlo-Regular”,并且它会产生几秒钟的惩罚。一旦我们使用了正确的字体名称,就不再发生延迟。
(奇怪的是,SKLabelNode仍然找到Menlo并使用它,所以我们的字体名称错误并不是很明显。据推测,延迟是由系统必须找出合适的替代品来使用的。一个好工作,找到我们打算使用的字体,但这需要一段时间才能完成,因此延迟。)
答案 1 :(得分:3)
我有同样的问题。将以下代码添加到您的第一个场景中,使用您的字体名称:
SKLabelNode *preload = [SKLabelNode labelNodeWithFontNamed:@"Avenir"];
preload.text = @"text";
如果您不提供文字,则不会加载字体。请注意,您不需要将标签作为子项添加到场景中。