У вас проблемы с округлением с плавающей запятой.Понятия 1/2 пикселя не существует, поэтому, когда вы попадаете в положение, подобное 12,5, системе необходимо либо сделать его равным 12, либо 13.
Теперь, поскольку десятичная дробь плохо конвертируется в фракталдвоичный код, который вы в итоге получите с номерами, такими как 12.499929932092434234234324 и 12.50000000342423423424, но, насколько вы знаете, он по-прежнему равен 12,5.
либо вверх, либо вниз.
Возможно, вы захотите округлить, так как большинство гридов работают в системе индексации на основе 0.
Чтобы исправить ваш код, нам нужно сделать:
override func update(_ currentTime: TimeInterval) {
bg.position.x.round(.down)
bg.position.y.round(.down)
bg2.position.x.round(.down)
bg2.position.y.round(.down)
bg3.position.x.round(.down)
bg3.position.y.round(.down)
// Called before each frame is rendered
if bg.position.y <= -self.frame.size.height {
bg.position.y += self.frame.size.height*2
//this ensures that your backgrounds line up perfectly
}
if bg2.position.y <= -self.frame.size.height {
bg2.position.y += self.frame.size.height*2
//this ensures that your backgrounds line up perfectly
}
if bg3.position.y <= -self.frame.size.height {
bg3.position.y += self.frame.size.height*2
//this ensures that your backgrounds line up perfectly
}
}
Теперь, конечно, по мере того, как вы будете совершенствоваться в процессе разработки, вы захотите переместить эти типы вещей за пределы функции обновления.В конце концов, вы захотите выполнить эти проверки при изменении позиции, таким образом, если ничего не движется, вам не нужно без необходимости выполнять эти строки кода для исправления позиции, которую не нужно фиксировать.
Редактировать:
Заметил еще одну проблему, вам нужно сделать + = высота, а не = высота, потому что, если вы находитесь в -1, это также приведет к разрыву, так как вы не учитываете линию высоты - 1 (В основном,Ваше первое изображение заканчивается на высоте - 2, а ваше новое изображение начинается на высоте, создавая зазор на высоте - 1)