在这里,我正在优化我的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/