SKLabelNode 创建黑色矩形

SKLabelNode Creating Black Rectangle

我看到了this question,但是没有确定的解决问题,也不完全一样。我试图简单地添加一个带有一些文本的 SKLabelNode 。我从来没有遇到过问题,但由于某种原因,这种情况正在发生: 这是我用来生成节点的代码:

var announceLabel = SKLabelNode(fontNamed: "Baskerville")
announceLabel.text = "ERROR LOADING ANNOUNCEMENT"
announceLabel.fontColor = UIColor.blackColor()
announceLabel.fontSize = 200
announceLabel.setScale(twitterButton.frame.height / announceLabel.frame.height)
announceLabel.position = CGPoint(x: self.frame.midX, y: self.frame.midY)
self.addChild(announceLabel)

我正在 iPhone 6 上对此进行测试,我在创建标签节点时从未发生过这种情况。我尝试了不同的字体、位置和比例,但没有效果。任何帮助是极大的赞赏!谢谢!

刚刚测试了一些,我找到了答案。字体太大,我猜是 SpriteKit 出了问题。我将字体大小更改为 50,并且效果很好(我在其他标签节点上使用了字体大小 200,从未出现过问题):

var announceLabel = SKLabelNode(fontNamed: "Baskerville")
announceLabel.text = "ERROR LOADING ANNOUNCEMENT"
announceLabel.fontColor = UIColor.blackColor()
announceLabel.fontSize = 50
announceLabel.setScale(twitterButton.frame.height / announceLabel.frame.height)
announceLabel.position = CGPoint(x: self.frame.midX, y: self.frame.midY)
self.addChild(announceLabel)

我有同样的问题,但它只是在 iPhone 6+ 模拟器上,我认为实际设备也是如此。适用于 6、6、4 秒、iPad 2 和 iPad 空气。

要显示文本,我必须做的是减小字体大小。在我的例子中,我使用的字体大小为 64 (Hobo Std) & 不得不将其减少到 56。但是,我发现线的长度是部分原因。如果该行大约为 45 个字符或更少,则它以 64 号显示,但当它长约 50 个字符时,它变成一个 64 号的黑色矩形,但在 56 号时工作正常。所以似乎是字体大小和数量的组合字符。

这一定是一个错误,但仍在 Xcode 6.4

两年半后,我 运行 遇到了同样的问题。似乎当 SKLableNode 的宽度超过一定大小时,它只是显示为一个黑色矩形。我做了一个快速的二进制搜索,发现错误的大小在 2038 到 2054 之间,所以我要冒昧地说一下截止值是 2048。我猜这是 SpriteKit 中的一个错误?我没有看到任何关于它的文档...

解决方法:

  1. 将字体大小减半并将比例加倍。这就是我现在正在做的,即我的 fontSize 从 64 变为 32,并且设置了 setScale(2)。缺点是字体质量不高。此外,这只会将您的限制增加到有效 4096 点。所以很长的标签还是不行。
  2. 将您的文本分成块,生成不大于 2048 的 SKLabelNode。以这种方式获得正确的文本布局可能会很痛苦。

我从未来来到这里是为了给你带来一些结束。 在 2018 年,我们仍然遇到与大 SKLabelNodes 相同的问题。

现在很多 Apple 设备都使用 @3x 资源,很明显模拟器在复制大型 @3x 图像方面很糟糕,将它们显示为黑色 retangular/squared 形状。需要明确的是:此错误仅限于模拟设备上的高分辨率图像。

它也会影响 SKLabelNodes 因为它的工作方式。 SKLabelNode 在显示之前将文本呈现为高分辨率图像。将其呈现为高分辨率图像是有意义的,因为文本可读性需要细节,也允许缩放。

因此,如果选择足够大的字体让您遇到同样的麻烦,可以肯定地说模拟器@3x 渲染过程需要一些调试。


TL;TR

  • 此线程和其他线程中的问题报告表明这是一个 SIMULATOR 错误,仅影响模拟设备显示的大于 @2x 的图像。
  • SKLabelNode 生成高分辨率图像用于展览,所以 有问题。
  • 如果您确定自己在做什么,它在真实设备上看起来会很好。