如何在SpriteKit中的所有设备上创建相同大小的文本?

时间:2015-12-21 21:01:56

标签: ios swift sprite-kit sklabelnode

在SpriteKit中,有没有办法让SKLabelNode看起来大小相同,无论设备如何,例如:在iPhone 5上看起来与6Plus大小相同?

我尝试过使用别人推荐的方法:

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

但是它并没有使所有文本的大小相同,因为像“man”这样的单词并不像“High”这样的单词一样高(因为它的“y”和“h”伸出来)。

那么是否有一种方法可以在所有设备上使文本看起来大小相同?目前我像这样创建SKLabelNode:

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

3 个答案:

答案 0 :(得分:2)

这里的问题是你正在尝试扩展fontSize,这对于复杂的十进制数并不是很好。相反,在创建标签后,只需将其缩放到您用来缩放其他所有内容的比例因子

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

text.xScale = xScaleFactor
text.yScale = yScaleFactor

其中xScaleFactoryScaleFactor是您用来确定比例的因素。 (这个数字应该只需计算一次,然后存储,如果你不这样做,我会建议做出改变)

基本上,您提供的代码就是这样完成的:

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 :(得分:1)

我认为这更像是一个算法问题。想想你需要在电视,iPad或iPhone设备中实现相同的功能。你应该考虑存储它的绝对值而不是它的实际值。

公式应为.dollarAmount:before {content: "$ ";text-align:left} .dollarAmount{width:80px;border:1px solid #ccc;text-align:right} 。高度相同。然后,如果您在其他设备中使用相同的图像数据。您只需要将新设备宽度/高度相乘。

答案 2 :(得分:0)

是的,我已经玩过每个人的答案,并发现使用以下内容使得每个设备上的文字大小大致相同,从5到6Plus:

mySKLabelNode.setScale(frame.width * 0.001)

因此,似乎将SKLabelNode的比例设置为屏幕的百分比,使用.setScale就是答案。 (至少对我的具体情况而言)