ios sprite-kit skscene sklabelnode

ios - ¿Demora al llamar a SKLabelNode?



sprite-kit skscene (6)

Tengo un problema con un ligero retraso (retraso) al pasar de un SKScene a otro. Al comentar varios bits de código he reducido esto a SKLabelNode , mi suposición es que está cargando / almacenando en caché la fuente cuando se llama, lo que resulta en un pequeño retraso / tartamudeo cuando se establece el nuevo SKScene .

Alguien más ha notado esto, es menos obvio cuando solo usa un SKScene simple (como la plantilla predeterminada) ya que la desaceleración simplemente se pierde con el retraso de inicio habitual. ¿Alguien sabe una forma de evitar esto, hay alguna manera de precargar la fuente? Supongo que podría cargar la fuente en el UIViewController al inicio y ver si podía acceder desde el SKScene , ¿alguien alguna idea?

-(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]; ...


Una cosa que noté es que si no usas un nombre de fuente "real" cuando creas un SKLabelNode, obtienes la demora que mencionaste. Como "Sistema" no es un nombre de fuente real, está experimentando el retraso. Intente elegir una de las fuentes reales según lo enumerado por el sistema. (Por ejemplo, pruebe "HelveticaNeue" en lugar de "Sistema").


El truco de precarga habitual es crear una versión "ficticia" del activo en el delegado de su aplicación, que debe almacenar efectivamente en caché la fuente personalizada en su caso en el tiempo de ejecución. Esto también ayudará a identificar si este es el verdadero problema o no: hay muchas formas en que se introducen los tartamudeos que son difíciles de rastrear eficientemente en el Kit de Sprite.


Tuve un retraso en la renderización de SKScene porque estaba usando múltiples UIViewControllers para navegar por mi aplicación en lugar de tener un solo UIViewController cuya vista es una SKView; encontré la respuesta aquí . Tan pronto como refactoricé mi código para usar un solo UIViewController, la transición entre SKScenes se hizo perfecta.

Si este no es su problema, tal vez podría instanciar sus SKScenes cuando su vista se carga y hacer alguna actualización del contenido de la escena justo antes de hacer la transición y presentar la escena.


Tenga cuidado de no cargar toda la familia de fuentes. Si cargo "Chalkboard SE" tomará de 4 a 6 segundos y parecerá que funciona.

Pero si cargo ChalkboardSE-Regular, es virtualmente instantáneo ~ 100ms o menos.

Aquí hay una lista de los nombres de las fuentes reales que debe usar: AcademyEngravedLetPlain

AlNile-Bold

AlNile

AmericanTypewriter-Light

AmericanTypewriter-CondensedLight

AmericanTypewriter-CondensedBold

AmericanTypewriter

AmericanTypewriter-Condensed

AmericanTypewriter-Bold

AppleColorEmoji

AppleSDGothicNeo-Thin

AppleSDGothicNeo-UltraLight

AppleSDGothicNeo-SemiBold

AppleSDGothicNeo-Medium

AppleSDGothicNeo-Regular

AppleSDGothicNeo-Bold

AppleSDGothicNeo-Light

ArialMT

Arial-BoldItalicMT

Arial-ItalicMT

Arial-BoldMT

ArialHebrew-Bold

ArialHebrew-Light

ArialHebrew

ArialRoundedMTBold

Avenir-pesado

Avenir-oblicuo

Avenir-negro

Avenir-libro

Avenir-BlackOblique

Avenir-HeavyOblique

Avenir-luz

Avenir-MediumOblique

Avenir-Medium

Avenir-LightOblique

Avenir-romano

Avenir-BookOblique

AvenirNext-MediumItalic

AvenirNext-Bold

AvenirNext-UltraLight

AvenirNext-DemiBold

AvenirNext-HeavyItalic

AvenirNext-Heavy

AvenirNext-Medium

AvenirNext-Italic

AvenirNext-UltraLightItalic

AvenirNext-BoldItalic

AvenirNext-Regular

AvenirNext-DemiBoldItalic

AvenirNextCondensed-Regular

AvenirNextCondensed-MediumItalic

AvenirNextCondensed-UltraLightItalic

AvenirNextCondensed-UltraLight

AvenirNextCondensed-BoldItalic

AvenirNextCondensed-Italic

AvenirNextCondensed-Medium

AvenirNextCondensed-HeavyItalic

AvenirNextCondensed-Heavy

AvenirNextCondensed-DemiBoldItalic

AvenirNextCondensed-DemiBold

AvenirNextCondensed-Bold

BanglaSangamMN

BanglaSangamMN-Bold

Baskerville-Bold

Baskerville-SemiBoldItalic

Baskerville-BoldItalic

Baskerville

Baskerville-SemiBold

Baskerville-Cursiva

BodoniSvtyTwoITCTT-Book

BodoniSvtyTwoITCTT-Bold

BodoniSvtyTwoITCTT-BookIta

BodoniSvtyTwoOSITCTT-BookIt

BodoniSvtyTwoOSITCTT-Bold

BodoniSvtyTwoOSITCTT-Book

BodoniSvtyTwoSCITCTT-Book

BodoniOrnamentsITCTT

BradleyHandITCTT-Bold

ChalkboardSE-Light

ChalkboardSE-Regular

ChalkboardSE-Bold

Chalkduster

Cochin-Bold

Cochin-BoldItalic

Cochin-Italic

Cochin

Plato de cobre

Copperplate-Light

Copperplate-Bold

mensajero

Courier-Oblique

Courier-BoldOblique

Courier-Bold

CourierNewPSMT

CourierNewPS-BoldMT

CourierNewPS-ItalicMT

CourierNewPS-BoldItalicMT

DamascoBold

Damasco

DamascusLight

DamascoMedio

DamascoSemiBold

DevanagariSangamMN

DevanagariSangamMN-Bold

Didot-Bold

Didot-Cursiva

Didot

DINAlternate-Bold

DINCondensed-Bold

EuphemiaUCAS

EuphemiaUCAS-Bold

EuphemiaUCAS-Cursiva

Farah

Futura-Medium

Futura-CondensedMedium

Futura-MediumItalic

Futura-CondensedExtraBold

GeezaPro-Bold

GeezaPro

Georgia-BoldItalic

Georgia-Bold

Georgia-Cursiva

Georgia

GillSans

GillSans-Italic

GillSans-BoldItalic

GillSans-Light

GillSans-LightItalic

GillSans-Bold

GujaratiSangamMN-Bold

GujaratiSangamMN

GurmukhiMN-Bold

GurmukhiMN

STHeitiSC-Medium

STHeitiSC-Light

STHeitiTC-Medium

STHeitiTC-Light

Helvetica-Oblique

Helvetica-Light

Helvetica-Bold

Helvética

Helvetica-BoldOblique

Helvetica-LightOblique

HelveticaNeue-BoldItalic

HelveticaNeue-Light

HelveticaNeue-Cursiva

HelveticaNeue-UltraLightItalic

HelveticaNeue-CondensedBold

HelveticaNeue-MediumItalic

HelveticaNeue-Thin

HelveticaNeue-Medium

HelveticaNeue-ThinItalic

HelveticaNeue-LuzItalic

HelveticaNeue-UltraLight

HelveticaNeue-Bold

HelveticaNeue

HelveticaNeue-CondensedBlack

HiraKakuProN-W6

HiraKakuProN-W3

HiraMinProN-W6

HiraMinProN-W3

HoeflerText-Regular

HoeflerText-BlackItalic

HoeflerText-Italic

HoeflerText-Black

IowanOldStyle-Bold

IowanOldStyle-BoldItalic

IowanOldStyle-Italic

IowanOldStyle-Roman

Kailasa

Kailasa-Bold

KannadaSangamMN

KannadaSangamMN-Bold

KhmerSangamMN

KohinoorDevanagari-Light

KohinoorDevanagari-Book

KohinoorDevanagari-Medium

LaoSangamMN

MalayalamSangamMN

MalayalamSangamMN-Bold

Marion-Regular

Marion-Cursiva

Marion-Bold

MarkerFelt-Thin

MarkerFelt-Wide

Menlo-BoldItalic

Menlo-Regular

Menlo-Bold

Menlo-Cursiva

DiwanMishafi

Notable-Bold

Luz digna de mención

Optima-Regular

Optima-Italic

Optima-Bold

Optima-BoldItalic

Optima-ExtraBlack

OriyaSangamMN

OriyaSangamMN-Bold

Palatino-Romano

Palatino-Cursiva

Palatino-Bold

Palatino-BoldItalic

Papiro-Condensado

Papiro

PartyLetPlain

SavoyeLetPlain

SinhalaSangamMN

SinhalaSangamMN-Bold

SnellRoundhand-Black

SnellRoundhand-Bold

SnellRoundhand

Superclarendon-Regular

Superclarendon-BoldItalic

Superclarendon-Light

Superclarendon-BlackItalic

Superclarendon-Italic

Superclarendon-LightItalic

Superclarendon-Bold

Superclarendon-Black

Símbolo

TamilSangamMN

TamilSangamMN-Bold

TeluguSangamMN

TeluguSangamMN-Bold

Thonburi-Bold

Thonburi

Thonburi-Light

TimesNewRomanPS-BoldItalicMT

TimesNewRomanPSMT

TimesNewRomanPS-BoldMT

TimesNewRomanPS-ItalicMT

Trebuchet-BoldItalic

TrebuchetMS

TrebuchetMS-Bold

TrebuchetMS-Cursiva

Verdana-BoldItalic

Verdana-Cursiva

Verdana

Verdana-Bold

ZapfDingbatsITC

Zapfino

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


La demora se basa en la carga de tu fuente. Mejor precargar fuentes, sonidos y cualquier otro recurso que pretenda usar, para que no tenga un retraso cuando se usa realmente la primera vez.

Puede precargar en su configuración con:

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

Como se señala en los comentarios, la precarga solo es necesaria cuando se utiliza una fuente que no está disponible a través de iOS.


Agregué este método en mi "AppDelegate.m":

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

y lo llamó en:

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

La aplicación no se cargó más despacio y funcionó perfectamente en toda la aplicación. Encontré la respuesta aquí: SKLabelNode retrasa el inicio de la aplicación