这是我的问题:尽管做了这些:
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)
最佳答案
确保你的纹理图集被用作单例类属性,因为如果你在方法范围内创建纹理图集变量进行预加载,它们将在方法返回后被释放
关于ios - 即使有预加载,SpriteKit 加载纹理的首次时间延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34148160/