2013-09-26 19 views
9

Ich habe den folgenden Code in meinem Spiel verwendet. Das Problem ist, dass ich keine mehrzeilige Beschriftung in Spritekit machen kann, wie ich es mit CCLabelTTF tun konnte ...... Kann mir jemand helfen? Auch bin ich nicht in der Lage entweder \ t oder \ n in meinem Code ... Danke für die Antwort im Voraus n funktioniert nicht 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]; 

Antwort

4

Es scheint, dass SKLabelNode unterstützt nur eine Textzeile zu einem Zeitpunkt, zu verwenden. Ich kann es nicht in der SpriteKit Dokumentation finden oder anderswo offiziellen, aber es ist auf der 47th Schlitten von this WWDC presentation. erwähnt Sie müssen UILabel stattdessen verwenden, die Sie here.

+1

Ich weiß, dass dies eine alte Antwort ist, aber der zweite Teil dieser Antwort stört mich, "UILabel stattdessen verwenden." Zuletzt wusste ich, dass "UILabel" nicht in einer "SKScene" verwendet werden kann, und erklärt hier nur, wie man ein 'UILabel' verwendet, nicht wie man es in einer' SKScene' verwendet. Der einzige Weg, an den ich denken kann, ist, dass Sie den gerenderten Inhalt von einem versteckten 'UILabel' einfangen und in einen' SKSpriteNode' legen können (ich versuche tatsächlich, diesen Ansatz zu vermeiden, der mich zu dieser Frage brachte) – Knight0fDragon

5

erklärt sehen Sie NSLayoutManager verwenden können, um Leitungsausgangs- Brechen Sie die Saite auf eine gewünschte Breite, wie von this question angedeutet.

Beachten Sie, dass NSLayoutManagerauf iOS verfügbar ist beginnend mit iOS 7.

+0

danke für die Hilfe Kumpel. –

7

ich hatte das gleiche Problem. Ich habe einen Drop-In-Ersatz für SKLabelNode namens DSMultilineLabelNode erstellt, der Zeilenumbruch, Zeilenumbrüche usw. unterstützt. Die zugrunde liegende Implementierung zeichnet die Zeichenfolge in einen Grafikkontext und wendet sie dann auf eine Textur auf einem SKSpriteNode an.

Es ist auf GitHub unter:

https://github.com/downrightsimple/DSMultilineLabelNode

+0

Danke für den Hilfe-Kumpel. –

+0

Funktioniert super danke! – DavidNorman

3

Wie viele andere auch ich ein Update für dieses Problem erforderlich. Mein Ansatz war viel einfacher als Chris Lösung. Ich habe eine Unterklasse von SKLabelNode namens NORLabelNode gemacht.

Es ist verfügbar unter GitHub und es ist auch eine Cocoapod verfügbar.

Es erstellt einfach eine Reihe von SKLabelNodes und diese als Unterknoten verwenden. Wenn Sie etwas Ähnliches selbst die Haupt Kern implementieren wollen, ist diese Methode:

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

Die oben etwas vereinfacht ist, da die Etiketten auch die meisten anderen Eigenschaften von ihren Eltern erben.

Der Zeilenabstand kann über eine CGFloat-Eigenschaft geändert werden. Abgesehen davon funktioniert es wie ein gewöhnliches SKLabelNode und Sie können Text, Farbe, Schriftart, fontSize etc. im laufenden Betrieb ändern, wann immer Sie möchten.

Verwandte Themen