您好我正在使用Spritekit和Swift,我正在根据用户手指在屏幕上的移动进行一些相机移动和其他操作。
在摘要中,我的问题是TouchesMoved没有一致地更新,并且改变了它们之间的一致性。即使没有TouchesMoved,所有其他方法(如Update())也会一致地更新。
它在一半的时间里工作得非常顺畅,但有时会因为TouchesMoved方法直接影响的任何事情而开始滞后。以下是我的一些代码:
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches{
var positionInScene = touch.location(in: self.view)
//Some arithmetic for calculating length (nothing complex or long)
camera.setScale(length)
}
}
“滞后”仅在触摸之间出现或落后。
它通常也会爆发。如果它会滞后,通常会在10个或更多触摸的组合中进行,反之亦然。有时候第一次点击游戏会出现滞后现象,有时需要50才能让游戏显示出来。
请注意,即使触摸运动滞后,游戏中也没有任何其他东西滞后(更不用说其他一切都比触摸运动复杂得多,通常它只是简单地放大和缩小相机)。 游戏使用30%的CPU,50 MB的内存和非常高的用电量。
更新:我在调用TouchesMoved方法和Update方法之间经过了一段时间。无论如何,Update方法将以.016秒的间隔运行。 TouchesMoved做同样的事情,但是当我注意到滞后时,因为这个间隔由于某种原因被加倍了。为什么TouchesMoved正在接收更新延迟,但我的其他更复杂的方法不是?
这是另一篇似乎有类似问题的帖子: Choppy dragging in SpriteKit game
请为上帝的爱拯救我从这个深渊!我已经打了一个月这个问题了,这是我最后的希望,然后再去掉它。
谢谢!