2

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

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

2) 将我的地图集存储在单例中,这样它们就不会被 ARC 处理掉

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

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

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

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

        })

primaryAtlas 是存储在 Singleton 中的所有 4 个图集的数组。

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

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

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

3)我已经关闭了敌人的所有动画(不要运行SKAction)并且当他们被添加而不是动画时仍然会发生抖动。

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

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

这是我使用 Instruments 进行的一些分析的图片。 仪器捕捉

4

1 回答 1

0

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

于 2017-03-09T19:52:06.450 回答