2013-09-26 10 views
9

Ho usato il seguente codice nel mio gioco. Il problema è che non sono in grado di creare etichette multi-linea in spritekit come sono stato in grado di fare usando CCLabelTTF ...... Qualcuno può aiutarmi. Anche io sono in grado di utilizzare sia \ t \ n nel mio codice ... Grazie per la risposta in anticipo n non funziona in Sklabel SpriteKit

SKLabelNode *winner = [SKLabelNode labelNodeWithFontNamed:@"Arial"]; 
winner.text = @"Another\nTest"; 
winner.fontSize = 32; 
winner.fontColor = [SKColor blueColor]; 
winner.position = CGPointMake(100 , 160); 
[self addChild:winner]; 

risposta

4

Sembra che SKLabelNode supporta solo una riga di testo alla volta. Io non riesco a trovarlo nella documentazione SpriteKit o in qualsiasi altro ufficiale, ma è menzionato sulla diapositiva 47 ° this WWDC presentation. Dovrete usare UILabel invece, che si può vedere spiegato here.

+1

So che questa è una vecchia risposta, ma la seconda parte di questa risposta mi dà fastidio: "Usa invece UILabel". Infine sapevo che 'UILabel' non può essere usato all'interno di un' SKScene', e qui spiegato spiega solo come usare un 'UILabel', non come usarlo in un' SKScene'. L'unico modo in cui riesco a pensare è che puoi catturare i contenuti resi da una 'UILabel 'nascosta, e metterli in un' SKSpriteNode' (in realtà sto cercando di evitare questo approccio, che mi ha portato a questa domanda) – Knight0fDragon

5

È possibile utilizzare NSLayoutManager per line- rompere la stringa per abbinare una larghezza desiderata, come suggerito da this question.

noti che NSLayoutManagerè disponibile su iOS che inizia con iOS 7.

+0

grazie per il aiuto amico. –

7

Ho avuto lo stesso problema. Ho creato una sostituzione drop-in per SKLabelNode denominata DSMultilineLabelNode che supporta il ritorno a capo automatico, interruzioni di riga e così via. L'implementazione sottostante disegna la stringa in un contesto grafico e quindi la applica a una trama su un SKSpriteNode.

E 'disponibile su GitHub a:

https://github.com/downrightsimple/DSMultilineLabelNode

+0

Grazie per l'aiuto amico. –

+0

Funziona benissimo! – DavidNorman

3

Come molti altri ho anche bisogno di una correzione a questo problema. Il mio approccio era molto più semplice della soluzione di Chris. Ho creato una sottoclasse di SKLabelNode denominata NORLabelNode.

E 'disponibile allo GitHub e c'è anche un cocoapod disponibile.

Crea semplicemente un set di SKLabelNodes e li utilizza come sottonodi. Se si desidera implementare qualcosa di simile se stessi il senso principale è questo metodo:

- (NSArray *)labelNodesFromText:(NSString *)text{ 
    NSArray *substrings = [text componentsSeparatedByString:@"\n"]; 
    NSMutableArray *labelNodes = [[NSMutableArray alloc] initWithCapacity:[substrings count]]; 

    NSUInteger labelNumber = 0; 
    for (NSString *substring in substrings) { 
     SKLabelNode *labelNode = [SKLabelNode labelNodeWithFontNamed:self.fontName]; 
     labelNode.text = substring; 
     labelNode.fontColor = self.fontColor; 
     labelNode.fontSize = self.fontSize; 
     labelNode.horizontalAlignmentMode = self.horizontalAlignmentMode; 
     labelNode.verticalAlignmentMode = self.verticalAlignmentMode; 
     CGFloat y = self.position.y - (labelNumber * self.fontSize * self.lineSpacing); 
     labelNode.position = CGPointMake(self.position.x, y); 
     labelNumber++; 
     [labelNodes addObject:labelNode]; 
    } 

    return [labelNodes copy]; 
} 

Quanto sopra è un po 'semplificato le etichette ereditano anche la maggior parte degli altri oggetti di loro genitore.

La linepacing può essere modificata tramite una proprietà CGFloat. Oltre a questo, funziona come un normale SKLabelNode e puoi cambiare testo, colore, carattere, fontSize ecc. Al volo ogni volta che vuoi.

Problemi correlati