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

标签 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)

最佳答案

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

关于ios - 如何在 SpriteKit 的所有设备上使文本大小相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34404261/

相关文章:

ios - Swift: View Controller 中的自定义 UIButton 类触摸事件未触发?

ios - 通过协议(protocol)更新 UILabel 导致崩溃(发现为零)

ios - 如何在 TableView 单元格中使用查询中的数据?

swift - 在 for 循环内等待 SKAction 完成

iOS GoogleMaps SDK 错误 : "[__NSCFDictionary objectForKeyedSubscript:]: Unrecognized selector sent"

ios - 如何从 UIBezierPath 获取点列表?

ios - NSNotification 监听器 iOS

每次点击应用程序图标时,iOS 13 应用程序都会请求一个新场景

sprite-kit - spritekit ios9 fps 下降

swift - 使用游戏 Controller (ThumbStick) Swift 移动 skspritenode