SKLabelNode延迟应用程序启动

时间:2014-04-23 21:05:08

标签: ios objective-c sprite-kit sklabelnode

目前我正在用SpriteKit编写一个小应用程序,它运行得非常好,但唯一的问题是SKLabelNode,我使用以下正常代码进行初始化:

​self.scoreLabel = [SKLabelNode labelNodeWithFontNamed:@"Futura"];
self.scoreLabel.fontSize = 190.0f;
self.scoreLabel.color = [SKColor whiteColor];
self.scoreLabel.alpha = .2;
self.scoreLabel.text = @"00";
self.scoreLabel.position = CGPointMake(screenWidth/2,self.scoreLabel.frame.size.height/2);
[self addChild:self.scoreLabel];

还有很多东西要初始化,但它们不会影响任何东西。如果我注释掉上面的代码,应用程序会在平时加载。使用SKLabelNode,它会将负载延迟几秒......

希望有人能帮助我。

3 个答案:

答案 0 :(得分:9)

实际上,您无需预先加载SKLabelNode的字体。延迟是由于您使用了错误的字体名称。 iOS上没有“Futura”字体 - 您可能意味着“Futura-Medium”。将“Futura”替换为“Futura-Medium”,您应该看到加载时间急剧下降。

(您仍然可以预加载字体,但这不是必需的;只要您使用正确的字体名称,延迟加载就非常快。)

答案 1 :(得分:5)

请注意,您不能加载整个字体系列。 如果我加载" Chalkboard SE"它需要4-6秒,似乎可以工作。

但如果我加载ChalkboardSE-Regular,它几乎是瞬间~100ms或更短。

如果您想了解更多信息,我可以在我简陋的博客上获得各种链接和时间安排。 https://gilesey.wordpress.com/2015/01/14/ios-spritekit-font-loading-times-of-sklabelnodes/

答案 2 :(得分:2)

您需要预先加载字体,以便在第一次调用SKScene sprite套件时已经在内存中准备好了字体。最好的方法是在游戏生命周期中尽快使用应用代理或单身人士。

self.scoreLabel = [SKLabelNode labelNodeWithFontNamed:@"Futura"];
self.scoreLabel.text = @"preload";

您不需要将标签设置为全局标签,只需确保您有一个强大的参考,让编译器知道您希望它将字体保留在内存中。另外,请确保设置text属性(仅在设置时加载字体)。

编辑:

这就是我正在使用的:

- (void)setupFonts {
    SKLabelNode *preloadFontLabel = [SKLabelNode labelNodeWithFontNamed:@"HelveticaNeue-UltraLight"];
    [preloadFontLabel setText:@"Preload"];
}

当游戏开始时,这是从游戏资产单身人士调用的,我也有一个回叫停止"播放"按钮在资源加载之前出现,因此用户无法跳过枪,直到所有内容都已启动并加载。我的游戏资产只需要1.03秒即可加载,所以它不是问题,但如果需要,您还可以在启动/启动屏幕后隐藏更长的负载。

如果您仍然遇到问题,我会检查您的SKScene中没有任何其他字体,表明您没有预加载。此外,加载自定义字体可能会出现问题,请尝试将字体更改为" HelveticaNeue-UltraLight"看看你是否也遇到了同样的问题。