2013-09-26 158 views
9

Tôi đã sử dụng mã sau trong trò chơi của mình. Vấn đề là tôi không thể làm cho nhãn nhiều dòng trong spritekit như tôi đã có thể làm bằng cách sử dụng CCLabelTTF ...... Ai đó có thể giúp tôi. Ngoài ra tôi vẫn chưa thể sử dụng \ n hoặc \ t hoặc trong mã của tôi ... Cảm ơn bạn đã trả lời trước n không hoạt động trong 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]; 

Trả lời

4

Dường như SKLabelNode chỉ hỗ trợ một dòng văn bản cùng một lúc. Tôi không thể tìm thấy nó trong tài liệu hướng dẫn SpriteKit hoặc chính thức bất cứ nơi nào khác, nhưng nó được đề cập trên slide thứ 47 của this WWDC presentation. Bạn sẽ phải sử dụng UILabel thay vào đó, bạn có thể xem giải thích here.

+1

Tôi biết đây là câu trả lời cũ, nhưng phần thứ hai của câu trả lời này làm phiền tôi, "Sử dụng UILabel thay thế." Cuối cùng tôi biết 'UILabel' không thể được sử dụng bên trong một' SKScene', và giải thích ở đây chỉ giải thích cách sử dụng một 'UILabel', không phải cách sử dụng nó trong một' SKScene'. Cách duy nhất tôi có thể nghĩ là bạn có thể nắm bắt nội dung được hiển thị từ một 'UILabel' ẩn và đặt nó thành' SKSpriteNode' (Tôi thực sự đang cố gắng tránh phương pháp này, điều này đưa tôi đến câu hỏi này) – Knight0fDragon

5

Bạn có thể sử dụng NSLayoutManager để line- phá vỡ chuỗi để khớp với chiều rộng mong muốn, như được gợi ý bởi this question.

Lưu ý rằng NSLayoutManagercó sẵn trên iOS bắt đầu với iOS 7.

+0

cảm ơn giúp đỡ bạn. –

7

tôi đã cùng một vấn đề. Tôi tạo ra một thay thế drop-in cho SKLabelNode được gọi là DSMultilineLabelNode hỗ trợ bọc từ, ngắt dòng, vv Việc triển khai cơ bản rút ra chuỗi thành ngữ cảnh đồ họa và sau đó áp dụng cho kết cấu trên SKSpriteNode.

Nó có sẵn trên GitHub tại địa chỉ:

https://github.com/downrightsimple/DSMultilineLabelNode

+0

Cảm ơn bạn đã giúp đỡ. –

+0

Hoạt động nhờ tuyệt vời! – DavidNorman

3

Giống như rất nhiều người khác tôi cũng cần một sửa chữa cho vấn đề này. Cách tiếp cận của tôi đơn giản hơn rất nhiều so với giải pháp của Chris. Tôi đã tạo một lớp con của SKLabelNode được gọi là NORLabelNode.

Công cụ này có sẵn tại GitHub và cũng có sẵn cocoapod.

Đơn giản chỉ cần tạo một tập hợp các SKLabelNodes và sử dụng chúng làm các nút con. Nếu bạn muốn thực hiện một cái gì đó tương tự như mình những ý chính chính là phương pháp này:

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

Ở trên là hơi đơn giản như các nhãn cũng kế thừa hầu hết các tài sản khác từ cha mẹ của họ.

Đường kẻ có thể được thay đổi thông qua thuộc tính CGFloat. Ngoài ra, nó hoạt động giống như một số SKLabelNode bình thường và bạn có thể thay đổi văn bản, màu sắc, phông chữ, fontSize, vv .. bất cứ khi nào bạn muốn.