【问题标题】:SpriteKit Load Texture First Time Lag Even With PreloadingSpriteKit 加载纹理的第一次延迟,即使预加载也是如此
【发布时间】:2016-03-12 22:00:24
【问题描述】:

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

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

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

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

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

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

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

        })

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

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

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

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

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

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

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

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

【问题讨论】:

  • 只是尝试在不同线程中预加载纹理和敌人当你的纹理完全加载时不要使用相同的线程添加一个新线程和使用该线程的敌人或者你可以分享你的代码。
  • 试过了。不工作。我不明白这一点。我在后台线程上运行它,但它在第一次绘制时仍然抖动。
  • @lespommes 你能找到解决方案吗?我正在经历同样的事情(iOS 9+)。
  • 不幸的是,我不是男人。从字面上看,没有一个人可以帮助我或建议一种有效的纹理管理“标准类模式”。我浪费了大量的时间,最终只是因为我没有想法而紧张不安地发布了它。我的建议?学习团结。 SpriteKit 真的不值得麻烦。我不会再使用它了。

标签: ios swift sprite-kit lag texture-atlas


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多