用SpriteKit创建一个RPG让我创建SKLabelNode来显示所有游戏文本。每次我的多行文本框开始自动输入使用SKLabelNode的文本时,我都会遇到性能问题(FPS下降和游戏滞后)。当“调用”UI元素(例如字符属性面板(SKLabelNode)的技能级别、技能名称等)时,我也会看到性能上的点击。
经验丰富的开发人员说预加载数据总是有帮助的,因此我做了以下工作(这降低了性能的影响,但并没有消除它&文本框仍然滞后):
// 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时能获得更多的优化技巧。
发布于 2016-12-07 09:30:36
尝试用您需要的所有字符预加载SKLabelNode。也许,SpriteKit只将所需的象形文字呈现到纹理中。
// 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,它就不会绘制);尝试将该节点保持在场景中。
_modelLabel.alpha = CGFLOAT_MIN;
[self addChild:_modelLabel];如果没有帮助:
zPosition (又名z-index)来组织节点。您应该禁用ignoresSiblingOrder,因为它可以控制zPosition。使您的所有SKLabelNode绘制在一个z级。发布于 2016-12-08 20:26:30
在我看来,每次你需要文字的时候,你都在创建新的标签。如果我是你,你只创建一次标签,只需在需要时更改文本,只需隐藏不使用的行即可。
您可以做的另一件事是在标签上填写文本一次,然后将其分配给SKCropNode。然后你可以使用SKCropNode把字体字符带回来,这反过来会给你一个更好的滚动效果,因为你不是一次只做一个字符。
https://stackoverflow.com/questions/41011924
复制相似问题