我在游戏中使用了以下代码。问题是我无法在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];
答案 0 :(得分:7)
我遇到了同样的问题。我为SKLabelNode创建了一个名为DSMultilineLabelNode的替代品,它支持自动换行,换行等。底层实现将字符串绘制到图形上下文中,然后将其应用于SKSpriteNode上的纹理。
可在GitHub上找到:
答案 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等。