优化SpriteKit

Ber*_*lor 1 optimization performance ios sprite-kit

在这里,我正在优化我的sprite-kit代码,试图测试我的游戏引擎的界限.

使用仪器时间分析我修复了我自己的大部分问题,现在是唯一的瓶颈

37.0ms   66.0%  0,0       -[SKTextureAtlas textureNamed:]
Run Code Online (Sandbox Code Playgroud)

(我的游戏每半秒从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
Run Code Online (Sandbox Code Playgroud)

对于性能如此重要的东西,苹果提供的字符串比较真的很糟糕吗?为什么它们不能提供更简单的方法来访问地图集中的纹理,我们这里不需要花哨的字符串,它可以通过int迭代我们所关心的.

有这方面的比较经验吗?

Lea*_*s2D 10

是的,避免textureNamed:在游戏运行时(经常)使用.即使使用预加载的纹理,也需要花费一些时间来累积.

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

  • 这只是为我节省了大量时间!我无法弄清楚为什么我的记忆通过屋顶并花了这么长时间才能加载.我虽然重新使用纹理,如果它们具有相同的图像名称.加载SKSpriteNodes spriteNodeWithImageNamed:275MB 30secs加载.在临时可变字典中抛出纹理并使用spriteNodeWithTexture加载:加载时不到一秒钟27MB. (2认同)