带有 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
在 Xcode 中的 SKSpriteNode 中设置 LabelNode 的文本