10

ゲームで次のコードを使用しています。問題は、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

4 に答える 4

7

私も同じ問題を抱えていました。単語の折り返し、改行などをサポートする DSMultilineLabelNode という SKLabelNode のドロップイン置換を作成しました。基になる実装は、文字列をグラフィックス コンテキストに描画し、それを SKSpriteNode のテクスチャに適用します。

次の GitHub で入手できます。

https://github.com/downrightsimple/DSMultilineLabelNode

于 2014-02-12T21:20:39.203 に答える
5

この質問で示唆されているように、NSLayoutManager を使用して、文字列を改行して目的の幅に合わせることができます。

NSLayoutManager 、iOS 7以降の iOS で使用できることに注意してください。

于 2013-09-26T19:52:06.820 に答える
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 などをいつでもその場で変更できます。

于 2014-04-20T08:47:39.520 に答える