致电SKLabelNode时延迟?
当从一个SKScene
转换到另一个SKScene
时,我遇到了轻微延迟(滞后)的问题。 通过注释掉各种代码,我把它缩小到了SKLabelNode
,我的猜测就是它在调用时加载/缓存字体,这会在说明新的SKScene
时导致一个小的延迟/ SKScene
。
有没有其他人注意到这一点,当你使用单个SKScene
(如默认模板)作为减速只是在通常的启动延迟中丢失时,它就不那么明显了。 有没有人知道这方面的方法,有没有办法预加载字体? 我想我可以在启动时加载UIViewController
上的字体,看看我是否可以通过SKScene
访问它,任何人SKScene
任何想法吗?
-(id)initWithSize:(CGSize)size { if (self = [super initWithSize:size]) { [self setScore:0]; [self setBackgroundColor:[SKColor blackColor]]; SKLabelNode *labelNode = [SKLabelNode labelNodeWithFontNamed:@"System"]; [labelNode setText:@"00000"]; [labelNode setFontSize:20.0]; [labelNode setPosition:CGPointMake(CGRectGetMidX(self.frame),500)]; [labelNode setName:@"SCORE"]; [labelNode setAlpha:1.0]; [self addChild:labelNode]; [self setScoreLabel:labelNode]; ...
延迟基于字体的加载。 最好预加载您打算使用的字体,声音和任何其他资源,以便在第一次实际使用时没有延迟。
您可以在设置中预加载:
SKLabelNode *preload = [SKLabelNode labelNodeWithFontNamed:@"System"]; [preload setText:@"anything"];
如评论中所述,只有在使用iOS无法提供的字体时才需要预加载。
我注意到的一件事是,如果在创建SKLabelNode时不使用“真实”字体名称,则会得到您提到的延迟。 由于“系统”不是实际的字体名称,因此您遇到了延迟。 尝试选择系统列出的实际字体之一。 (例如,尝试“HelveticaNeue”而不是“System”。)
通常的预加载技巧是在应用程序委托中创建资产的“虚拟”版本,这应该有效地在运行时缓存自定义字体。 这也有助于确定这是否是真正的问题 – 有很多方法可以引入难以在Sprite Kit中高效追踪的口吃。
我在SKScene渲染方面遇到了延迟,因为我使用多个UIViewControllers来浏览我的应用程序,而不是只有一个视图是SKView的UIViewController; 在这里找到答案。 一旦我重构我的代码以使用单个UIViewController,SKScenes之间的转换变得无缝。
如果这不是您的问题,也许您可以在视图加载时实例化SKScenes,并在转换和呈现场景之前对场景内容进行任何更新。
请注意,您没有加载整个字体系列。 如果我加载“Chalkboard SE”,它将需要4-6秒,并且似乎工作。
但如果我加载ChalkboardSE-Regular,它几乎是瞬间~100ms或更短。
以下是您应该使用的实际字体名称列表:AcademyEngravedLetPlain
AlNile粗体
AlNile
AmericanTypewriter光强
AmericanTypewriter-CondensedLight
AmericanTypewriter-CondensedBold
AmericanTypewriter
AmericanTypewriter冷凝
AmericanTypewriter粗体
AppleColorEmoji
AppleSDGothicNeo薄
AppleSDGothicNeo,超轻
AppleSDGothicNeo-SemiBold
AppleSDGothicNeo介质
AppleSDGothicNeo正规
AppleSDGothicNeo粗体
AppleSDGothicNeo光强
ArialMT
宋体,BoldItalicMT
宋体,ItalicMT
宋体,BoldMT
ArialHebrew粗体
ArialHebrew光强
ArialHebrew
ArialRoundedMTBold
艾文莉重
艾文莉斜
艾文莉黑
艾文莉图书
艾文莉,BlackOblique
艾文莉,HeavyOblique
艾文莉光强
艾文莉-MediumOblique
艾文莉介质
艾文莉-LightOblique
艾文莉罗马
艾文莉,BookOblique
AvenirNext-MediumItalic
AvenirNext粗体
AvenirNext,超轻
AvenirNext-DemiBold
AvenirNext-HeavyItalic
AvenirNext重
AvenirNext介质
AvenirNext斜体
AvenirNext-UltraLightItalic
AvenirNext-BOLDITALIC
AvenirNext正规
AvenirNext-DemiBoldItalic
AvenirNextCondensed正规
AvenirNextCondensed-MediumItalic
AvenirNextCondensed-UltraLightItalic
AvenirNextCondensed,超轻
AvenirNextCondensed-BOLDITALIC
AvenirNextCondensed斜体
AvenirNextCondensed介质
AvenirNextCondensed-HeavyItalic
AvenirNextCondensed重
AvenirNextCondensed-DemiBoldItalic
AvenirNextCondensed-DemiBold
AvenirNextCondensed粗体
BanglaSangamMN
BanglaSangamMN粗体
巴斯克维尔粗体
巴斯克维尔-SemiBoldItalic
巴斯克维尔-BOLDITALIC
巴斯克维尔
巴斯克维尔-SemiBold
巴斯克维尔斜体
BodoniSvtyTwoITCTT图书
BodoniSvtyTwoITCTT粗体
BodoniSvtyTwoITCTT-BookIta
BodoniSvtyTwoOSITCTT-BookIt
BodoniSvtyTwoOSITCTT粗体
BodoniSvtyTwoOSITCTT图书
BodoniSvtyTwoSCITCTT图书
BodoniOrnamentsITCTT
BradleyHandITCTT粗体
ChalkboardSE光强
ChalkboardSE正规
ChalkboardSE粗体
Chalkduster
科钦粗体
科钦 – BOLDITALIC
科钦斜体
科钦
铜版
铜版,光
铜板粗体
信使
信使斜
信使BoldOblique
快递粗体
CourierNewPSMT
CourierNewPS-BoldMT
CourierNewPS-ItalicMT
CourierNewPS-BoldItalicMT
DamascusBold
大马士革
DamascusLight
DamascusMedium
DamascusSemiBold
DevanagariSangamMN
DevanagariSangamMN粗体
狄多粗体
狄多斜体
狄多
DINAlternate粗体
DINCondensed粗体
EuphemiaUCAS
EuphemiaUCAS粗体
EuphemiaUCAS斜体
法拉
富利介质
富利-CondensedMedium
富利-MediumItalic
富利-CondensedExtraBold
GeezaPro粗体
GeezaPro
佐治亚BOLDITALIC
格鲁吉亚粗体
格鲁吉亚斜体
格鲁吉亚
GillSans
GillSans斜体
GillSans-BOLDITALIC
GillSans光强
GillSans-LightItalic
GillSans粗体
GujaratiSangamMN粗体
GujaratiSangamMN
GurmukhiMN粗体
GurmukhiMN
STHeitiSC介质
STHeitiSC光强
STHeitiTC介质
STHeitiTC光强
黑体斜
黑体光强
黑体,粗体
黑体
黑体-BoldOblique
黑体-LightOblique
HelveticaNeue-BOLDITALIC
HelveticaNeue-灯
HelveticaNeue斜体
HelveticaNeue-UltraLightItalic
HelveticaNeue-CondensedBold
HelveticaNeue-MediumItalic
HelveticaNeue薄
HelveticaNeue介质
HelveticaNeue-ThinItalic
HelveticaNeue-LightItalic
HelveticaNeue-超轻
HelveticaNeue粗体
HelveticaNeue
HelveticaNeue-CondensedBlack
HiraKakuProN-W6
HiraKakuProN-W3
HiraMinProN-W6
HiraMinProN-W3
HoeflerText正规
HoeflerText-BlackItalic
HoeflerText斜体
HoeflerText黑
IowanOldStyle粗体
IowanOldStyle-BOLDITALIC
IowanOldStyle斜体
IowanOldStyle罗马
凯拉萨
凯拉萨粗体
KannadaSangamMN
KannadaSangamMN粗体
KhmerSangamMN
KohinoorDevanagari光强
KohinoorDevanagari图书
KohinoorDevanagari介质
LaoSangamMN
MalayalamSangamMN
MalayalamSangamMN粗体
马里昂正规
马里昂斜体
马里昂粗体
MarkerFelt薄
MarkerFelt-宽
门罗,BOLDITALIC
门罗正规
门罗粗体
门罗斜体
DiwanMishafi
值得注意的粗体
值得注意的是,光
舰正规
舰斜体
舰粗体
舰,BOLDITALIC
舰,ExtraBlack
OriyaSangamMN
OriyaSangamMN粗体
帕拉蒂诺罗马
帕拉蒂诺斜体
帕拉蒂诺粗体
帕拉蒂诺-BOLDITALIC
纸莎草冷凝
纸莎草
PartyLetPlain
SavoyeLetPlain
SinhalaSangamMN
SinhalaSangamMN粗体
SnellRoundhand黑
SnellRoundhand粗体
SnellRoundhand
Superclarendon正规
Superclarendon-BOLDITALIC
Superclarendon光强
Superclarendon-BlackItalic
Superclarendon斜体
Superclarendon-LightItalic
Superclarendon粗体
Superclarendon黑
符号
TamilSangamMN
TamilSangamMN粗体
TeluguSangamMN
TeluguSangamMN粗体
吞武里,大胆
吞武里
吞武里,光
TimesNewRomanPS-BoldItalicMT
TimesNewRomanPSMT
TimesNewRomanPS-BoldMT
TimesNewRomanPS-ItalicMT
投石机,BOLDITALIC
TrebuchetMS
TrebuchetMS粗体
TrebuchetMS斜体
宋体,BOLDITALIC
宋体斜体
宋体
宋体粗体
ZapfDingbatsITC
Zapfino
请参阅https://gilesey.wordpress.com/2015/01/14/ios-spritekit-font-loading-times-of-sklabelnodes/
我在“AppDelegate.m”中添加了这个方法:
- (void)setupFonts { SKLabelNode *preloadFontLabel = [SKLabelNode labelNodeWithFontNamed:@"cinnamonCake"]; [preloadFontLabel setText:@"Preload"]; }
并称之为:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [self setupFonts]; return YES; }
该应用程序没有加载任何较慢,它在整个应用程序完美无缺地工作。 在这里找到答案: SKLabelNode延迟应用程序启动