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.
Nguồn
2014-04-20 08:47:39
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