Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在SpriteKit的所有设备上使文本大小相同?_Ios_Swift_Sprite Kit_Sklabelnode - Fatal编程技术网

Ios 如何在SpriteKit的所有设备上使文本大小相同?

Ios 如何在SpriteKit的所有设备上使文本大小相同?,ios,swift,sprite-kit,sklabelnode,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.heig

在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)

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


公式应为存储值的
宽度=此设备的实际宽度/设备宽度
。高度也一样。然后,如果在其他设备中使用相同的图像数据。您只需将新设备的宽度/高度相乘。

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


公式应为存储值的
宽度=此设备的实际宽度/设备宽度
。高度也一样。然后,如果在其他设备中使用相同的图像数据。您只需将新设备的宽度/高度相乘。

这里的问题是,您正在尝试缩放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

这里的问题是,您正在尝试缩放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

您在所有设备中的常数是多少?帧是相同的号码吗?基本上,我需要知道场景是否正在进行缩放/调整大小。我希望字体大小为屏幕高度的10%,无论它在什么设备上。所以它应该和屏幕大小成比例?我还不能回答这个问题,我需要知道你的场景是否正在调整大小是的,我相信是这样的?所有内容的大小都基于屏幕的百分比。例如,一个按钮的大小是“frame.width*0.5”,但在场景中不会发生任何变化。好的,让我们做一个简单的lol。告诉我你使用的scaleMode,以及你如何创建游戏场景你在所有设备中的常量是什么?帧是相同的号码吗?基本上,我需要知道场景是否正在进行缩放/调整大小。我希望字体大小为屏幕高度的10%,无论它在什么设备上。所以它应该和屏幕大小成比例?我还不能回答这个问题,我需要知道你的场景是否正在调整大小是的,我相信是这样的?所有内容的大小都基于屏幕的百分比。例如,一个按钮的大小是“frame.width*0.5”,但在场景中不会发生任何变化。好的,让我们做一个简单的lol。让我看看你使用的scaleMode,以及你如何创建游戏场景。我不认为这很复杂,我只想能够创建SKLabelNodes,让它们在所有iPhone上看起来都一样大?这并不复杂。这只是你如何存储你的宽度和高度。我不认为这有那么复杂,我只是想能够创建SKLabelNodes,让它们在所有iPhone上看起来都一样大?这并不复杂。这就是你如何储存你的宽度和高度。