Как создать квадратный SKLabelNode в наборе Sprite

Как я могу создать SKLabelNode и установить его ширину и высоту. Я думал о том, чтобы просто сделать спрайт с включенным словом, а затем расположить этот спрайт, но я не верю, что это лучший способ сделать это.

Изображение: http://i.imgur.com/dAP6yeT.png Спасибо!

2 ответа

Следующий код добавит узел с текстом, который вы предоставляете, с рамкой вокруг него. Граница будет прямоугольником, который соответствует размеру текста. Если вы хотите, чтобы он был квадратным, просто отрегулируйте borderPath указывает на использование только labelNode.frame.size.width/2 для горизонтального и вертикального расстояния. Отрегулируйте +/- 10 на величину интервала вокруг текста, который вы хотите.

//create the wrapper node
float initialWidth = 50;
float initialHeight = 50;
SKSpriteNode *parentNode = [SKSpriteNode spriteNodeWithColor:[UIColor whiteColor] size:CGSizeMake(initialWidth, initialHeight)];

//create the label node
NSString *FontName = [UIFont boldSystemFontOfSize:10].fontName;
SKLabelNode *labelNode = [SKLabelNode labelNodeWithFontNamed:FontName];
labelNode.text = @"some text";
labelNode.fontColor = [UIColor blackColor];
labelNode.position = CGPointMake(0, -labelNode.frame.size.height/4);

//create the border node
SKShapeNode *borderNode = [SKShapeNode new];
UIBezierPath* borderPath = [[UIBezierPath alloc] init];
[borderPath moveToPoint:CGPointMake(-labelNode.frame.size.width/2 -10, -labelNode.frame.size.height/2 -10)];
[borderPath addLineToPoint:CGPointMake(labelNode.frame.size.width/2 +10, -labelNode.frame.size.height/2 -10)];
[borderPath addLineToPoint:CGPointMake(labelNode.frame.size.width/2 +10, labelNode.frame.size.height/2 +10)];
[borderPath addLineToPoint:CGPointMake(-labelNode.frame.size.width/2 -10, labelNode.frame.size.height/2 +10)];
[borderPath addLineToPoint:CGPointMake(-labelNode.frame.size.width/2 -10, -labelNode.frame.size.height/2 -10)];
borderNode.path = borderPath.CGPath;
borderNode.lineWidth = 10.0;
[borderNode setStrokeColor:[UIColor blackColor]];

//add it all together and present it
[parentNode addChild:borderNode];
[parentNode addChild:labelNode];
parentNode.position = newShapeScenePoint;
parentNode.size = CGSizeMake(labelNode.frame.size.width +10, labelNode.frame.size.height +10);
[myScene addChild:parentNode];

Вы можете переместить все это с

parentNode.position = CGPointMake(someNewX, someNewY)

Вы можете изменить размер всей вещи (включая текст) с

float bigger = 3.0; //or whatever size you want
parentNode.xScale = bigger;
parentNode.yScale = bigger;

Я думаю, что лучший способ сделать то, что вы спрашиваете, это делать то, что вы сказали. Просто сделай образ слова. Это делает его там, где вы также можете использовать его в качестве кнопки. Это может вычесть некоторые fps, но только если у вас есть около 50+ узлов в вашей сцене. Что маловероятно, поскольку большинство людей наносят ярлыки на меню. Но если вы хотите изменить размер SKLabelNode, просто измените размер текста следующим образом. label.fontsize = 20

Другие вопросы по тегам