呼叫SKLabelNode时延迟?

时间:2013-12-04 16:39:44

标签: ios sprite-kit skscene sklabelnode

当从一个SKScene转换到另一个SKLabelNode时,我遇到了轻微延迟(延迟)的问题。通过注释掉各种代码,我将其缩小到SKScene,我的猜测就是它在调用时加载/缓存字体,这会在说明新的SKScene时导致一个小的延迟/断断续续

有没有其他人注意到这一点,当你只使用一个UIViewController(如默认模板)作为减速时,它在通常的启动延迟中丢失就不那么明显了。有没有人知道这方面的方法,有没有办法预加载字体?我想我可以在启动时加载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]; ... 访问它,任何人都有想法?

{{1}}

6 个答案:

答案 0 :(得分:4)

延迟是基于字体的加载。最好预加载您打算使用的字体,声音和任何其他资源,以便在第一次实际使用时没有延迟。

您可以在设置中预加载:

SKLabelNode *preload = [SKLabelNode labelNodeWithFontNamed:@"System"];
[preload setText:@"anything"]; 

如评论中所述,只有在使用iOS无法提供的字体时才需要预加载。

答案 1 :(得分:4)

我注意到的一件事是,如果您在创建SKLabelNode时不使用“真实”字体名称,则会得到您提到的延迟。由于“系统”不是实际的字体名称,因此您遇到了延迟。尝试选择系统列出的实际字体之一。 (例如,尝试“HelveticaNeue”而不是“System”。)

答案 2 :(得分:1)

通常的预加载技巧是在您的app委托中创建资产的“虚拟”版本,这应该有效地在运行时缓存您的自定义字体。这也有助于确定这是否是真正的问题 - 有很多方法可以引入口吃,这些方法很难在Sprite Kit中有效追踪。

答案 3 :(得分:1)

我在SKScene渲染方面遇到了延迟,因为我使用多个UIViewControllers来浏览我的应用程序,而不是只有一个视图是SKView的UIViewController;找到了答案here。一旦我重构我的代码以使用单个UIViewController,SKScenes之间的转换变得无缝。

如果这不是您的问题,也许您可​​以在视图加载时实例化您的SKScenes,并在转换和呈现场景之前对场景内容进行任何更新。

答案 4 :(得分:1)

请注意,您不能加载整个字体系列。 如果我加载" 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

Arial字体-BoldItalicMT

Arial字体-ItalicMT

Arial字体-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

值得注意-粗体

值得注意的光强

的Optima正规

的Optima-斜体

的Optima-粗体

的Optima-BOLDITALIC

的Optima-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/

答案 5 :(得分:0)

我在“AppDelegate.m”中添加了这个方法:

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

并将其调用:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [self setupFonts];
    return YES;
}

该应用程序没有加载任何较慢,它在整个应用程序完美无缺地工作。 在这里找到答案:SKLabelNode delays app start