【问题标题】:SpriteKit - Game lags between didFinishUpdate and next update (during scene rendering)SpriteKit - didFinishUpdate 和下一次更新之间的游戏滞后(在场景渲染期间)
【发布时间】:2017-03-02 21:53:24
【问题描述】:

更新 我删除了我的应用程序中运行的大部分进程,但仍然观察到这些“滞后”。所以我尝试了一个新项目(XCode 8 附带的 SpriteKit Demo 项目并记录了帧时间。即使在这里,帧也有延迟。请看下图:Frame time from SpriteKit demo。至少这对我的游戏来说效果并不紧密,这不会让调试变得更容易.. :-/

你能观察到同样的效果吗?您可以使用以下代码简单地记录时间:

var cycleStart = Date().timeIntervalSince1970
var cycleEnd = Date().timeIntervalSince1970
var lastTime = TimeInterval()
var delta = TimeInterval()

override func update(_ currentTime: TimeInterval) {
    delta = currentTime - lastTime
    lastTime = currentTime
    print("\(delta) \(cycleEnd-cycleStart)")
    cycleStart = Date().timeIntervalSince1970
}

override func didFinishUpdate() {
    cycleEnd = Date().timeIntervalSince1970
}

我仍然想知道为什么滞后帧持续时间会跳到 33 毫秒。这就是 SpriteKit 的工作方式吗?我的意思是,如果不是所有进程都及时完成,而不是将单帧持续时间延长完成所有进程所需的时间,那么下一帧会被跳过吗?

原始问题 我的 SpriteKit 游戏偶尔会滞后。不幸的是,到目前为止,我无法识别任何可能导致滞后的功能或过程。所以我试图通过测量整个场景处理过程中经过的时间来缩小范围。请看一下图表: Plot: Total frame time vs. update->didFinishUpdate

我绘制了从进入 update() 函数到调用 didFinishUpdate() 之间经过的时间(橙色)以及一个 update() 和下一个 update() 函数之间的时间,即整个帧时间(蓝色)。

我看不到延迟之间的直接链接以及 update/didFinishUpdate 之间的超长时间。看起来,好像某些帧的渲染过程需要更长的时间。

另一个有趣的观察:正常帧速率是 60(16.6 毫秒),但“滞后”帧的持续时间几乎是 33 毫秒,因此是 30 fps。

现在我的两个问题: 1、有什么方法可以分析渲染过程中发生了什么? 2. 你们中是否有人观察到类似的现象,显然整个帧被跳过(如果这是对 33ms 帧的正确解释)?

非常感谢任何帮助!先感谢您!

PS:时间是在运行 iOS 10.2 的 iPhone 7 上记录的,应用程序是在 swift3 中编程的。

【问题讨论】:

  • 请添加一些演示问题的代码,否则我们无能为力
  • 我希望我可以添加一些代码。由于所有函数都完全在 update() 和 didFinishUpdate() 之间执行,并且在滞后帧和较长的函数执行时间之间没有可见的关系,我不知道我应该发布哪些代码部分。

标签: ios swift xcode sprite-kit


【解决方案1】:

我以前见过这种问题,但在所有情况下都是我的错。

最常见的原因是:

  • 在 SKShapeNodes 上渲染动画(我只有 18 个,每个路径有 7 个旋转)。
  • 更改非常大的背景图像(在 SKSprite 节点中)
  • SKSprite 动作的完成块中的繁重处理。
  • 在另一个线程中有大量(50000+)对象实例超出范围(即被释放)。
  • 后台线程中的其他繁重工作负载。

并非所有这些都会导致渲染延迟,但它们确实会导致 SKScene 渲染出现一些明显的放缓。

【讨论】:

  • 谢谢,阿兰!我在不同的后台线程中有很多事情要做。我认为这是从常规场景更新中删除操作的最佳方式。我会调查的。但是您对大图像的评论听起来更有希望。我从两个精灵节点中获得了无限滚动的背景。它们都有大约 320x1000 像素的交替图像。很大,对吧?我希望这就是问题所在。我会在调查后发布结果。谢谢
猜你喜欢
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多