ios - 即使有预加载,SpriteKit 加载纹理的首次时间延迟

标签 ios swift sprite-kit lag texture-atlas

这是我的问题:尽管做了这些:

1) 预加载我所有的纹理图集

2) 将我的 map 集存储在 Singletons 中,这样它们就不会被 ARC 处理掉

3) 将我所有的动画数组存储在 Singleton 中

只有在第一次添加敌人时,SpriteKit 仍然会出现短暂的“滞后抖动”。纹理绘制一次后,将该纹理添加到场景中时,它再也不会滞后。当最终在屏幕上绘制纹理时,可以看到内存在增加,看起来它们没有被预加载。

我目前在启动时使用...在我的 AppDelegate 中预加载我所有的纹理图集

        SKTextureAtlas.preloadTextureAtlases(primaryAtlas, withCompletionHandler: { () -> Void in

        })

primaryAtlas 是我所有 4 个 map 集的数组,存储在一个单例中。

让我指出一些我已经尝试过的事情以及我当前的设置。

1) 我的动画帧数组存储在单例中,并从位于不同单例中的图集中获取它们的图像。他们曾经在同一个单例中。

2) 我已经尝试将我所有的纹理存储在一个 Singleton 中,这些纹理都是从 map 集加载的。但是目前我的动画是存储的,而我的单个纹理是从图集中获取该纹理的函数。

3) 我已经关闭了敌人的所有动画(不要运行 SKAction),当它们被添加但没有动画时,抖动仍然发生。

我已经尝试解决这个问题很长时间了,老实说似乎没有解决方案。

我在这里发现了一个类似的 StackOverflow 问题,但没有答案:Spritekit: First texture draw slow (preloaded)

这是我使用 Instruments 进行的一些分析的图片。 Instruments capture

最佳答案

确保你的纹理图集被用作单例类属性,因为如果你在方法范围内创建纹理图集变量进行预加载,它们将在方法返回后被释放

关于ios - 即使有预加载,SpriteKit 加载纹理的首次时间延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34148160/

相关文章:

swift - 在对其中一个执行移动操作后未检测到两个对象之间的碰撞

ios - Table view cell height based on Dynamic height Table Height问题

iphone - 如何在 iOS 5 中更改 UITabBarItem 中的文本颜色

ios - 如何从 plist 读取到 NSString

ios - 小数位值在 swift 中不起作用

swift - 为什么 keyboardDismissMode 不起作用?

ios - 如何在单击时从一个 ViewController(包含自定义 UIView)移动到另一个 ViewController(包含 UITableView)?

ios - 阻止 LaunchScreen 在 App 从 URL Scheme 加载时显示 - iOS

ios - 引用另一个类中的对象

ios - 展开 segue 以查看包含 SpriteKit 的 SKView 的 Controller 非常慢