首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >优化SKLabelNode以减少性能问题

优化SKLabelNode以减少性能问题
EN

Stack Overflow用户
提问于 2016-12-07 07:46:23
回答 2查看 353关注 0票数 3

用SpriteKit创建一个RPG让我创建SKLabelNode来显示所有游戏文本。每次我的多行文本框开始自动输入使用SKLabelNode的文本时,我都会遇到性能问题(FPS下降和游戏滞后)。当“调用”UI元素(例如字符属性面板(SKLabelNode)的技能级别、技能名称等)时,我也会看到性能上的点击。

经验丰富的开发人员说预加载数据总是有帮助的,因此我做了以下工作(这降低了性能的影响,但并没有消除它&文本框仍然滞后):

代码语言:javascript
运行
复制
// Preloaded model label (private property that is initialized in the class init method).
_modelLabel = [[SKLabelNode alloc] initWithFontNamed:_fontName];
_modelLabel.fontColor = _fontColor;
_modelLabel.fontSize = _fontSize;
_modelLabel.text = @"T";

// Constantly created label.
SKLabelNode *rowText = [[SKLabelNode alloc] initWithFontNamed:self.modelLabel.fontName];
rowText.fontColor = self.modelLabel.fontColor;
rowText.fontSize = self.modelLabel.fontSize;
rowText.text = row;
...
[self addChild:rowText];

我希望在使用SKLabelNode时能获得更多的优化技巧。

  • 只有在使用通过iOS不可用的字体时,才需要预装。
  • 要使字体实际加载,还需要设置预加载的文本才能工作。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-07 09:30:36

尝试用您需要的所有字符预加载SKLabelNode。也许,SpriteKit只将所需的象形文字呈现到纹理中。

代码语言:javascript
运行
复制
// Preloaded model label (private property that is initialized in the class init method).
_modelLabel = [[SKLabelNode alloc] initWithFontNamed:_fontName];
_modelLabel.fontColor = _fontColor;
_modelLabel.fontSize = _fontSize;
_modelLabel.text = @"ABCDEFGHIJKLMNOPQRSTUVWXZabcdefghijklmnopqrstuvwxyz0123456789-+=_()";

然后用最小alpha将模型添加到场景中(但没有零,因为如果节点有0 alpha,它就不会绘制);尝试将该节点保持在场景中。

代码语言:javascript
运行
复制
_modelLabel.alpha = CGFLOAT_MIN;
[self addChild:_modelLabel];

如果没有帮助:

  • 通过对节点的zPosition (又名z-index)来组织节点。您应该禁用ignoresSiblingOrder,因为它可以控制zPosition。使您的所有SKLabelNode绘制在一个z级。
  • 切换到位图字体。编写自定义位图字体渲染器是非常容易的。唯一你应该记住的事情--让所有的字形都在纹理地图集中,这样你就可以在一次抽签中画出你的文字。
  • 使用本机标签。我不知道这有多大帮助。如果你的FPS滴得很重(~5..10 FPS),这可能对你有帮助
票数 2
EN

Stack Overflow用户

发布于 2016-12-08 20:26:30

在我看来,每次你需要文字的时候,你都在创建新的标签。如果我是你,你只创建一次标签,只需在需要时更改文本,只需隐藏不使用的行即可。

您可以做的另一件事是在标签上填写文本一次,然后将其分配给SKCropNode。然后你可以使用SKCropNode把字体字符带回来,这反过来会给你一个更好的滚动效果,因为你不是一次只做一个字符。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41011924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档