像很多其他的我也需要一個修復這個問題。我的方法比Chris的解決方案簡單得多。我製作了SKLabelNode
的一個子類,名爲NORLabelNode
。
它在GitHub可用,也有一個可可。
它只是創建一組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等。
我知道這是一箇舊的答案,但這個答案的第二部分困擾我,「改用UILabel。」最後,我知道'UILabel'不能在'SKScene'中使用,這裏只解釋如何使用'UILabel',而不是如何在'SKScene'中使用它。我能想到的唯一方法就是可以從隱藏的'UILabel'中捕獲渲染的內容,並將其放入一個'SKSpriteNode'中(我實際上試圖避免這種方法,這引起了我的問題) – Knight0fDragon