\n not working in Sklabel SpriteKit

与世无争的帅哥 提交于 2019-12-05 18:12:30

问题


I have been using the following code in my game. The Problem is that i am unable to make multi-line label in spritekit as i was able to do using CCLabelTTF...... Can Somebody help me. Also i am unable to use either \t or \n in my code... Thanks for the reply in advance

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

回答1:


It appears that SKLabelNode only supports one line of text at a time. I can't find it in the SpriteKit documentation or anywhere else official, but it's mentioned on the 47th slide of this WWDC presentation. You'll have to use UILabel instead, which you can see explained here.




回答2:


I had the same problem. I created a drop-in replacement for SKLabelNode called DSMultilineLabelNode that supports word wrap, line breaks, etc. The underlying implementation draws the string into a graphics context and then applies that to a texture on an SKSpriteNode.

It's available on GitHub at:

https://github.com/downrightsimple/DSMultilineLabelNode




回答3:


You can use NSLayoutManager to line-break the string to match a desired width, as hinted by this question.

Note that NSLayoutManager is available on iOS beginning with iOS 7.




回答4:


Like a lot of others I also needed a fix to this problem. My approach was a lot simpler than Chris' solution. I have made a subclass of SKLabelNode called NORLabelNode.

It's available at GitHub and there is also a cocoapod available.

It simply creates a set of SKLabelNodes and use these as subnodes. If you want to implement something similar yourself the main gist is this method:

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

The above is somewhat simplified as the labels also inherit most of the other properties from their parent.

The linespacing can be altered through a CGFloat property. Apart from this is works just like an ordinary SKLabelNode and you can change text, color, font, fontSize etc. on the fly whenever you feel like.



来源:https://stackoverflow.com/questions/19029580/n-not-working-in-sklabel-spritekit

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!