带有 SKLabelNode 的文本工具包

Posted

技术标签:

【中文标题】带有 SKLabelNode 的文本工具包【英文标题】:Text Kit with SKLabelNode 【发布时间】:2014-03-21 05:15:09 【问题描述】:

似乎无法将文本工具包、属性字符串和布局管理器与 Sprit Kit SKLabelNode 一起使用。

我想知道Sprite Kit游戏如何显示需要分成多行和属性字符串的长文本?

【问题讨论】:

【参考方案1】:

SKLabelNode 不支持属性字符串和换行。

恐怕您是否需要由您来实施它。您可以使用多个标签节点来显示多行,并可能编写一个自定义工具,将属性化换行字符串分割成多个标签,行距和颜色相应。也许这样的图书馆已经存在了。

另一种方法是在 SKView 顶部显示常规文本视图。

【讨论】:

我讨厌 SpriteKit,我需要的每一个功能,它都没有:-( 然后不要使用它或寻找解决方法。这些东西并不是 SK 特有的,因为我记得 cocos2d 也不支持属性字符串。 好吧,我必须找到解决方法:-)。我的论点是 SpriteKit,尤其是这个 SKLabelNode 缺少很多基本功能,例如我什至不能把“\n”放进去。 速度在渲染引擎中是最重要的。检测换行非常耗时,如果您认为它需要重新创建标签的纹理,则更是如此。如果我没记错的话,cocos2d 的 CCLabelTTF 也不能在很长一段时间内进行换行。 好的,很高兴了解背景,他们以牺牲功能为代价优化速度。【参考方案2】:

您可能想查看 ASAttributedLabelNode,这是一个支持属性字符串的 SKLabelNode 实现。

https://github.com/alex-alex/ASAttributedLabelNode

【讨论】:

【参考方案3】:

ios 11 开始,SKLabelNode 似乎支持属性字符串和自动换行符。新属性已添加到类的文档中:

attributedText lineBreakMode numberOfLines preferredMaxLayoutWidth

请注意:SpriteKit 更新有引入错误新功能的历史,因此您可能必须自己测试这些功能。


关于 SKLabelNode 性能的注意事项:

有一些建议您应该将标签转换为纹理并使用 SKSpriteNodes 渲染它们以获得更好的性能。我不知道这实际上会产生多大的不同,但对于带有您永远不会更改的文本的较小标签来说,这可能是有意义的。

SKView has a member function that converts a node into a texture:

- (SKTexture *)textureFromNode:(SKNode *)node;

【讨论】:

以上是关于带有 SKLabelNode 的文本工具包的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Sprite 工具包中创建方形 SKLabelNode

ui文本字段更新SKLabelNode

带有文本选择控件的浮动工具栏

在 Xcode 中的 SKSpriteNode 中设置 LabelNode 的文本

将文本创建为位图的工具(消除锯齿文本、自定义间距、透明背景)

如何设置 SKLabelNode 的字体大小以适应固定大小(Swift)