我正在使用SpriteKit,iOS应用程序中通过SKLabelNode渲染的计时器在更新函数中被更新。由于我不希望随着计数增加数字左右移动,因此我尝试使用Courier New字体。它比Avenir表现更好,但仍然存在一些数字宽度的微小波动。(6和9略宽于其他数字。)我在几个不同的实验中看到了这些波动,其中包括:
然后我像这样更新分数:
这是一张图片,覆盖在帧上面,展示了28和部分29的帧。你可以看到电影的边缘已经对齐了,但数字2的底部并没有对齐。
- 正常和粗体样式
- 大(65)和小(9)字号
- Courier New和Menlo字体
- Xcode模拟器和iPod Touch
我提交了查询“哪种字体具有统一宽度的数字”,但我能找到的所有答案都只是说“使用等宽字体”。(参见https://graphicdesign.stackexchange.com/questions/13148/which-fonts-have-the-same-width-for-every-character 或 Monospace Font - Not really Monospace?)
我的代码非常简单。我像这样设置了scoreNode:
scoreNode = SKLabelNode(fontNamed: "Courier New")
scoreNode.fontSize = 65
scoreNode.fontColor = UIColor.blackColor()
scoreNode.text = "0"
scoreNode.position = CGPoint(x: patternPane.midX, y: patternPane.midY)
patternPaneNode.addChild(scoreNode)
然后我像这样更新分数:
scoreNode.text = "\(viewControllerDelegate!.getScore())"
这是一张图片,覆盖在帧上面,展示了28和部分29的帧。你可以看到电影的边缘已经对齐了,但数字2的底部并没有对齐。
有什么解释吗?
可能iOS正在应用字距调整(kerning)到SKLabelNode,即使我使用的是等宽字体,这是否可能呢?