2013-09-26 69 views
9

我一直在我的遊戲中使用下面的代碼。問題是我無法在spritekit中製作多行標籤,因爲我可以使用CCLabelTTF ......可以有人幫助我。另外我無法爲使用\ T或\ n我的代碼...感謝您的答覆提前 n不適用於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]; 

回答

4

看來,SKLabelNode只支持一次一行文本。我找不到它的SpriteKit文檔或其他地方官員,但它是對的this WWDC presentation.第47幻燈片提到你將不得不使用UILabel相反,你可以看到解釋here.

+1

我知道這是一箇舊的答案,但這個答案的第二部分困擾我,「改用UILabel。」最後,我知道'UILabel'不能在'SKScene'中使用,這裏只解釋如何使用'UILabel',而不是如何在'SKScene'中使用它。我能想到的唯一方法就是可以從隱藏的'UILabel'中捕獲渲染的內容,並將其放入一個'SKSpriteNode'中(我實際上試圖避免這種方法,這引起了我的問題) – Knight0fDragon

5

您可以使用NSLayoutManager到線 - 按照this question暗示的方式打破字符串以匹配所需的寬度。

注意NSLayoutManager可在iOS上與iOS 7

+0

感謝幫助哥們。 –

7

我有同樣的問題開始。我爲SKLabelNode創建了一個名爲DSMultilineLabelNode的插件替代品,支持換行,換行符等。底層實現將字符串繪製到圖形上下文中,然後將其應用於SKSpriteNode上的紋理。

它可在GitHub上的:

https://github.com/downrightsimple/DSMultilineLabelNode

+0

感謝您的幫助哥們。 –

+0

非常感謝! – DavidNorman

3

像很多其他的我也需要一個修復這個問題。我的方法比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等。

相關問題