app*_*dix 6 objective-c ios 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];
Run Code Online (Sandbox Code Playgroud)
还有很多东西可以初始化,但它们不会影响任何东西.如果我注释掉上面的代码,应用程序会在平时加载.使用SKLabelNode,它可以将负载延迟几秒钟......
希望有人能帮助我.
实际上,您不需要为SKLabelNode预加载字体.延迟是由于您使用了错误的字体名称.iOS上没有"Futura"字体 - 您可能意味着"Futura-Medium".将"Futura"替换为"Futura-Medium",您应该看到加载时间急剧下降.
(你仍然可以预加载你的字体,但这不是必需的;只要你使用正确的字体名称,延迟加载就会非常快.)
请注意,您没有加载整个字体系列.如果我加载"Chalkboard SE",它将需要4-6秒,似乎工作.
但是,如果我加载ChalkboardSE-Regular,它几乎是瞬间~100ms或更短.
如果你想了解更多,我在我的简陋博客上有各种链接和时间.https://gilesey.wordpress.com/2015/01/14/ios-spritekit-font-loading-times-of-sklabelnodes/
您需要预加载字体,以便当您第一次调用 SKScene sprite 套件时,内存中已经准备好字体。做到这一点的最佳方法是在游戏生命周期中尽快使用应用程序委托或单例。
self.scoreLabel = [SKLabelNode labelNodeWithFontNamed:@"Futura"];
self.scoreLabel.text = @"preload";
Run Code Online (Sandbox Code Playgroud)
您不需要将标签设置为全局,只需确保保留强引用,让编译器知道您希望它将字体保留在内存中。还要确保设置文本属性(只有在设置此属性时才会加载字体)。
这就是我正在使用的:
- (void)setupFonts {
SKLabelNode *preloadFontLabel = [SKLabelNode labelNodeWithFontNamed:@"HelveticaNeue-UltraLight"];
[preloadFontLabel setText:@"Preload"];
}
Run Code Online (Sandbox Code Playgroud)
这是在游戏开始时从游戏资产单例中调用的,我还有一个回调,可以在资产加载之前停止出现“PLAY”按钮,这样用户就无法抢先一步,直到所有内容都已启动并加载。我的游戏资源只需要 1.03 秒即可加载,因此这不是问题,但如果需要,您也可以在启动屏幕/启动屏幕后面隐藏更长的加载时间。
如果您仍然遇到问题,我会检查您是否有任何其他SKScene未预加载的字体。此外,加载自定义字体也可能出现问题,请尝试将字体更改为“HelveticaNeue-UltraLight”,看看是否遇到同样的问题。
| 归档时间: |
|
| 查看次数: |
793 次 |
| 最近记录: |