Я испытываю это отставание или заикание в своей игре, и я думаю, что это может быть связано с тем, как камера следует за моим игроком.
Вот код:
func update(_ hp: CGPoint) {
let camMove = SKAction.move(to: CGPoint(x: hp.x, y: hp.y), duration: 0.2)
self.run(camMove)
}
Вышеупомянутая функция находится в расширении для SKCameraNode, и я вызываю ее в основном из функции обновления сцен.
Он работает довольно хорошо, хотя кто-то упомянул, что заикание может быть связано с перекрывающимися действиями, поскольку оно вызывается каждый кадр. Я использую этот метод, потому что продолжительность позволяет камере двигаться более естественно, чем жестко.
Я ищу альтернативы этому, чтобы устранить это дублирование SKAction.
Я попытался добавить вызов removeallActions() перед запуском нового действия, но это должно произойти быстро, потому что камера вообще не двигается. Кроме того, я попытался добавить ключ к действию и удалить по ключу до запуска следующего, но так же, как и removeallActions(), камера не двигается.
Я также пробовал следующее:
func moveCam(_ point: CGPoint) {
let camMove = SKAction.move(to: CGPoint(x: point.x, y: point.y), duration: 0.2)
self.run(camMove) {
self.moveCam(player.position)
}
}
Это останавливает наложение, но между окончанием одного действия и другим окончанием есть небольшая задержка, которая постоянно вызывает уродливое заикание.
У меня есть идея попытаться использовать SKAgents с последующим поведением, но я не совсем уверен, как это будет сделано и будет ли это хорошо. Любые предложения или решения будут весьма признательны.