在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)
答案 0 :(得分: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 :(得分: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就是答案。 (至少对我的具体情况而言)