\ n不在Sklabel SpriteKit中工作

时间:2013-09-26 13:24:18

标签: xcode5 sprite-kit

我在游戏中使用了以下代码。问题是我无法在spritekit中制作多行标签,因为我能够使用CCLabelTTF ......有人可以帮助我。此外,我无法在我的代码中使用\ t或\ n ...感谢提前回复

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

4 个答案:

答案 0 :(得分:7)

我遇到了同样的问题。我为SKLabelNode创建了一个名为DSMultilineLabelNode的替代品,它支持自动换行,换行等。底层实现将字符串绘制到图形上下文中,然后将其应用于SKSpriteNode上的纹理。

可在GitHub上找到:

https://github.com/downrightsimple/DSMultilineLabelNode

答案 1 :(得分:5)

SKLabelNode似乎一次只支持一行文字。我无法在SpriteKit文档或其他任何官方文档中找到它,但是在this WWDC presentation.的第47张幻灯片中提到它你将不得不使用UILabel,你可以看到解释{{3} }

答案 2 :(得分:5)

您可以使用NSLayoutManager对字符串进行换行以匹配所需的宽度,如this question所示。

请注意,从iOS 7开始,{/ 3}} 在iOS 上可用。

答案 3 :(得分:3)

和很多其他人一样,我也需要解决这个问题。我的方法比克里斯的解决方案简单得多。我创建了一个名为SKLabelNode NORLabelNode的子类。

它可以在GitHub获得,并且还有一个可用的cocoapod。

它只是创建一组SKLabelNodes并将它们用作子节点。如果你想自己实现类似的东西,主要的要点就是这个方法:

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

上面的内容有所简化,因为标签还会从其父级继承大部分其他属性。

可以通过CGFloat属性更改行间距。除此之外,它就像普通的SKLabelNode一样,您可以随时随地更改文本,颜色,字体,fontSize等。