2015-12-21 1 views
0

В SpriteKit есть ли способ сделать SKLabelNode одинакового размера, независимо от устройства, например: выглядит так же, как на iPhone 5, как 6Plus?Как сделать текст такого же размера на всех устройствах в SpriteKit?

Я попытался с помощью этого метода кого-то еще рекомендуется:

let textRect = CGRect(x: 0, y: 0, width: frame.width * 0.4, height: frame.height * 0.045) 
let scalingFactor = min(textRect.width/text.frame.width, textRect.height/text.frame.height) 
text.fontSize *= scalingFactor 

Но это не делает весь текст такого же размера, как и слова, как «человек» не так высок, как физически такие слова, как " Высокий "(из-за этого" y "и" h "торчат).

Итак, есть способ, чтобы текст выглядел одинаковым для всех устройств? В настоящий момент я создаю SKLabelNode следующим образом:

let text = SKLabelNode(text: "Start") 
text.fontSize = 30 
text.position = CGPoint(x: 0, y: 0) 
addChild(text) 
+1

Какова ваша постоянная информация на всех ваших устройствах? будет кадр быть одинаковым числом? В основном мне нужно знать, происходит ли какое-либо масштабирование/изменение размера со сценой. – Knight0fDragon

+0

Я бы хотел, чтобы размер шрифта составлял, например, 10% высоты экрана, независимо от того, на каком устройстве оно работает. Значит, он должен масштабироваться с размером экрана? – Dan2899

+0

Я не могу ответить, что еще, мне нужно знать, изменилась ли ваша сцена или нет – Knight0fDragon

ответ

2

Проблема в том, что вы пытаетесь масштабировать fontSize, и это не очень хорошо работает со сложными десятичными числами. Вместо этого, после того, как вы создаете ярлык, только масштаб, что масштабный коэффициент, который вы используете, чтобы масштабировать все остальное

let text = SKLabelNode(text: "Start") 
text.fontSize = 30 
text.position = CGPoint(x: 0, y: 0) 

text.xScale = xScaleFactor 
text.yScale = yScaleFactor 

где xScaleFactor и yScaleFactor являются факторами, которые вы используете, чтобы определить масштаб. (Это число должно быть только быть вычислено один раз, а затем сохраняется, если вы не делаете это, я бы рекомендовал сделать это изменение)

В основном в коде, при условии, что это делается так:

let textRect = CGRect(x: 0, y: 0, width: frame.width * 0.4, height: frame.height * 0.045) 
let scaleFactorX = textRect.width/text.frame.width 
let scaleFactorY = textRect.height/text.frame.height 
1

Я думаю, что это скорее вопрос алгоритма. Подумайте о том, что вам нужно реализовать одно и то же в телевизоре, iPad или устройстве iPhone. Вы должны думать о сохранении своей абсолютной величины, а не ее фактической стоимости.

Формула должна быть width for store value = actual width for this device/device width. То же самое с высотой. Затем, если вы используете одни и те же данные изображения на других устройствах. Вам просто нужно умножить новую ширину/высоту устройства.

+0

Я не думаю, что это сложно, я просто хочу иметь возможность создавать SKLabelNodes и иметь их одинаковый размер на всех iPhone'ах? – Dan2899

+0

Это не сложно. это то, как вы храните свою ширину и высоту. –

0

Да, я играл с ответами каждого, и обнаружили, что с использованием следующих сделал текст примерно такого же размера на каждом устройстве, от 5 до 6Plus:

mySKLabelNode.setScale(frame.width * 0.001) 

Так что, похоже установив масштаб SKLabelNode как% экрана, использование .setScale - это ответ. (По крайней мере, для моего конкретного сценария)

+0

setscale, как это делает число равномерно на x и y, поэтому для разных пропорций это будет не то же самое% base – Knight0fDragon

+0

Да, я не буду, но он достигнет аналогичных результатов по тому, что я искал. Ваш метод намного точнее и точнее, что отлично, но мне лично нужны только коэффициенты iPhone, поэтому я могу сделать короткий снимок и использовать .setScale! – Dan2899

+1

iphone имеет 2 отношения, вот почему я сделал свой ответ, как будто это LOL – Knight0fDragon

Смежные вопросы