Я думаю, вам нужно переместить эти строки:
self.timeOfLastMove = currentTime
self.determineInvaderMovementDirection()
находиться вне цикла, созданного:
enumerateChildNodes(withName: InvaderType.name)
в func moveInvaders(forUpdatefunc moveInvaders(forUpdate
.
Вы можете сделать это, просто переместив их после '}'.
Я думаю, что происходит то, что вы перемещаете одного захватчика, а затем меняете invaderMovementDirection
на proposedMovementDirection
, тогда как вы должны изменить значение invaderMovementDirection
только после того, как ВСЕ захватчики переместились.
Итак, они двигаются .right
, они ударяются о стену, и вы обрабатываете первого захватчика. Вы перемещаете его и затем вызываете determineInvaderMovementDirection
, который устанавливает предлагаемое направление на .downThenLeft
. В конце determineInvaderMovementDirection
вы устанавливаете направление захватчиков на .downThenLeft
с proposedMovementDirection
.
Когда вы обрабатываете следующий захватчик, его направление (неправильно) устанавливается как .downThenLeft
. поэтому вы перемещаете его вниз, затем влево, вызываете determineInvaderMovementDirection
, который устанавливает направление захватчиков на .left
, которое используется для обработки всех других захватчиков.