在这里,我正在优化我的Sprite-kit代码,试图测试游戏引擎的边界。

通过使用仪器时间分析,我解决了大多数问题,现在唯一剩下的瓶颈是

37.0ms   66.0%  0,0       -[SKTextureAtlas textureNamed:]

(我的游戏每半秒钟从TextureAtlases加载很多精灵。)
奇怪的是,在我的大多数测试中,似乎始终如一地通过名称的NSString比较导致了上述方法中三分之一以上的工作。
这里是子树:
15.0ms   26.7%  0,0         -[NSString caseInsensitiveCompare:]
15.0ms   26.7%  0,0          -[NSString compare:options:range:]
15.0ms   26.7%  0,0           -[NSString compare:options:range:locale:]
15.0ms   26.7%  6,0            CFStringCompareWithOptionsAndLocale

对于性能如此重要的事情,苹果提供的字符串比较在这里真的很糟糕吗?他们为什么不能提供一种更简单的方式来访问地图集中的Textures,我们这里不需要花哨的字符串,对于我们关心的所有问题,它都可以由int进行迭代。

有任何比较经验吗?

最佳答案

是的,避免在游戏运行时频繁使用textureNamed:。即使使用预加载的纹理,它也会花费时间来累积。

而是在单个ivars或NSArray或NSDictionary ivars中本地缓存所需的纹理(在使用它们的类中)。

关于ios - 优化SpriteKit,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25983665/

10-13 05:08