4

从一个过渡到另一个时,我遇到了轻微延迟(滞后)的问题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];
        ...
4

6 回答 6

4

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

于 2014-05-14T21:53:51.663 回答
4

延迟取决于字体的加载。最好预加载您打算使用的字体、声音和任何其他资产,这样您在第一次实际使用时就不会出现延迟。

您可以使用以下命令在您的设置中预加载:

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

如评论中所述,仅在使用无法通过 iOS 获得的字体时才需要预加载。

于 2013-12-05T03:37:51.087 回答
1

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

于 2013-12-04T16:55:20.363 回答
1

小心你没有加载整个字体系列。如果我加载“Chalkboard SE”,它将需要 4-6 秒,并且似乎可以工作。

但如果我加载 ChalkboardSE-Regular ,它几乎是瞬时的 ~100 毫秒或更短。

以下是您应该使用的实际字体名称列表: AcademyEngravedLetPlain

AlNile-Bold

尼罗河

AmericanTypewriter-Light

AmericanTypewriter-CondensedLight

AmericanTypewriter-CondensedBold

美国打字机

AmericanTypewriter-Condensed

AmericanTypewriter-Bold

苹果颜色表情符号

AppleSD哥特式Neo-Thin

AppleSD哥特式Neo-UltraLight

苹果SD哥特式Neo-SemiBold

AppleSDGothicNeo-Medium

AppleSDGothicNeo-Regular

AppleSDGothicNeo-Bold

AppleSD哥特式Neo-Light

ArialMT

Arial-BoldItalicMT

Arial-ItalicMT

Arial-BoldMT

ArialHebrew-Bold

ArialHebrew-Light

宋体希伯来语

ArialRoundedMTBold

Avenir-Heavy

Avenir-斜

Avenir-黑色

Avenir-书

Avenir-BlackOblique

Avenir-HeavyOblique

Avenir-光

Avenir-MediumOblique

Avenir 中型

Avenir-LightOblique

Avenir-罗马

Avenir-BookOblique

AvenirNext-MediumItalic

AvenirNext-Bold

AvenirNext-超轻

AvenirNext-DemiBold

AvenirNext-HeavyItalic

AvenirNext-Heavy

AvenirNext-Medium

AvenirNext-斜体

AvenirNext-UltraLightItalic

AvenirNext-BoldItalic

AvenirNext-常规

AvenirNext-DemiBoldItalic

AvenirNextCondensed-Regular

AvenirNextCondensed-MediumItalic

AvenirNextCondensed-UltraLightItalic

AvenirNextCondensed-UltraLight

AvenirNextCondensed-BoldItalic

AvenirNext 简体斜体

AvenirNext 浓缩培养基

AvenirNextCondensed-HeavyItalic

AvenirNext 浓缩-重

AvenirNextCondensed-DemiBoldItalic

AvenirNextCondensed-DemiBold

AvenirNextCondensed-Bold

孟加拉桑加姆MN

BanglaSangamMN-粗体

巴斯克维尔-粗体

Baskerville-SemiBoldItalic

Baskerville-BoldItalic

巴斯克维尔

巴斯克维尔-半粗体

巴斯克维尔-斜体

BodoniSvtyTwoITCTT-书

BodoniSvtyTwoITCTT-粗体

BodoniSvtyTwoITCTT-BookIta

BodoniSvtyTwoOSITCTT-BookIt

BodoniSvtyTwoOSITCTT-粗体

BodoniSvtyTwoOSITCTT-书

BodoniSvtyTwoSCITCTT-书

BodoniOrnamentsITCTT

BradleyHandITCTT-粗体

黑板SE-Light

黑板SE-常规

黑板SE-粗体

粉笔粉

Cochin-Bold

Cochin-Bold斜体

交趾斜体

科钦

铜版

铜版-灯

铜版-粗体

导游

Courier-Oblique

Courier-BoldOblique

Courier-Bold

快递新PSMT

CourierNewPS-BoldMT

CourierNewPS-ItalicMT

CourierNewPS-BoldItalicMT

大马士革粗体

大马士革

大马士革之光

大马士革中

大马士革半粗体

梵文SangamMN

梵文SangamMN-Bold

Didot-Bold

Didot-斜体

狄多

DINAlternate-Bold

DINCondensed-Bold

尤菲米亚UCAS

EuphemiaUCAS-粗体

EuphemiaUCAS-斜体

法拉

未来中型

Futura-浓缩培养基

Futura-MediumItalic

Futura-CondensedExtraBold

GeezaPro-粗体

GeezaPro

Georgia-BoldItalic

乔治亚-粗体

格鲁吉亚-斜体

乔治亚州

GillSans

GillSans-斜体

GillSans-BoldItalic

GillSans-Light

GillSans-LightItalic

GillSans-Bold

古吉拉特语SangamMN-Bold

古吉拉特语SangamMN

GurmukhiMN-粗体

古尔穆奇MN

STHeitiSC-中

STHeitiSC-Light

STHeitiTC-中

STHeitiTC-Light

Helvetica-Oblique

Helvetica-Light

Helvetica-粗体

黑尔维提卡

Helvetica-BoldOblique

Helvetica-LightOblique

HelveticaNeue-BoldItalic

HelveticaNeue-Light

HelveticaNeue-Italic

HelveticaNeue-UltraLightItalic

HelveticaNeue-CondensedBold

HelveticaNeue-MediumItalic

HelveticaNeue-Thin

HelveticaNeue-Medium

HelveticaNeue-ThinItalic

HelveticaNeue-LightItalic

HelveticaNeue-UltraLight

HelveticaNeue-Bold

HelveticaNeue

HelveticaNeue-CondensedBlack

平角ProN-W6

平角ProN-W3

HiraMinProN-W6

HiraMinProN-W3

HoeflerText-Regular

HoeflerText-黑色斜体

HoeflerText-Italic

HoeflerText-黑色

IowanOldStyle-Bold

IowanOldStyle-BoldItalic

IowanOldStyle-斜体

爱荷华州OldStyle-Roman

凯拉萨

凯拉萨粗体

卡纳达SangamMN

卡纳达语SangamMN-Bold

高棉僧伽MN

Kohinoor 天城文-Light

Kohinoor 天城文-书

Kohinoor 梵文-中

老桑干MN

马拉雅拉姆语SangamMN

马拉雅拉姆语SangamMN-Bold

马里昂-常规

马里昂-斜体

马里昂-博尔德

MarkerFelt-薄

标记毡宽

Menlo-Bold斜体

Menlo-Regular

门罗粗体

Menlo-斜体

迪万米沙菲

Noteworthy-Bold

值得一提的-轻

Optima-Regular

最佳斜体

Optima-Bold

Optima-BoldItalic

Optima-ExtraBlack

奥里亚桑甘MN

OriyaSangamMN-粗体

帕拉蒂诺-罗马

帕拉蒂诺-斜体

帕拉蒂诺-粗体

Palatino-BoldItalic

浓缩纸莎草纸

纸莎草纸

党让平原

SavoyeLetPlain

僧伽罗语SangamMN

僧伽罗语SangamMN-Bold

SnellRoundhand-黑色

SnellRoundhand-Bold

斯内尔圆手

Superclarendon-常规

Superclarendon-BoldItalic

Superclarendon-光

Superclarendon-BlackItalic

Superclarendon-斜体

Superclarendon-LightItalic

Superclarendon-粗体

Superclarendon-黑色

象征

泰米尔桑甘MN

TamilSangamMN-Bold

泰卢固语SangamMN

泰卢固语SangamMN-Bold

吞武里-粗体

吞武里

吞武里灯

TimesNewRomanPS-BoldItalicMT

时代新罗马PSMT

TimesNewRomanPS-BoldMT

TimesNewRomanPS-ItalicMT

Trebuchet-BoldItalic

投石机

TrebuchetMS-粗体

TrebuchetMS-斜体

Verdana-BoldItalic

Verdana-斜体

维达纳

Verdana-Bold

扎普丁巴茨ITC

扎菲诺

https://gilesey.wordpress.com/2015/01/14/ios-spritekit-font-loading-times-of-sklabelnodes/

于 2015-01-16T13:03:20.303 回答
1

我在 SKScene 渲染中出现了延迟,因为我使用多个 UIViewController 来导航我的应用程序,而不是使用一个视图为 SKView 的 UIViewController;在这里找到了答案。当我重构我的代码以使用单个 UIViewController 时,SKScene 之间的转换变得无缝。

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

于 2013-12-04T21:43:22.433 回答
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 延迟应用程序启动

于 2014-09-12T11:36:03.293 回答