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