У меня есть 2 узла спрайта. один игрок (красный) и еще один объект (зеленый). кроме того, есть невидимая область, которую я использую для обнаружения столкновений.
Мое намерение состоит в том, чтобы зеленые объекты приближались к красному игроку, как только игрок оказывается внутри синего прямоугольника.
До сих пор я настраивал обработку столкновений таким образом, что SKAction срабатывает, когда игрок сталкивается с синей областью. SKAction перемещает зеленый объект на позицию игрока. Этот подход работает до тех пор, пока я не работаю с изменениями текстур, которые обрабатываются с помощью SKActionForever.
Вот мой код, который у меня есть:
let distance: CGFloat = fabs(platformNode1.position.x - player.position.x);
let moveToPlayer = SKAction.move(to: CGPoint(x: player.position.x, y: platformNode1.position.y), duration: Double(distance/10))
let passengerAnimation = SKAction.group([moveToPlayer, animatePassengerAction])
animatePassengerAction = SKAction.repeatForever(SKAction.animate(with: passengerAnimation, timePerFrame: 0.1))
let removePassenger = SKAction.removeFromParent()
let setPassengerToOnBoard = SKAction.run({ () -> Void in
self.passengerOnBoard = true
})
let onBoardActionSequence = SKAction.sequence([passengerAnimation, removePassenger, setPassengerToOnBoard])
self.passenger.run(onBoardActionSequence, withKey: "isOnboarding")
Моя проблема не в том, что последовательность SKAction никогда не завершается, так как последовательность зацикливается "passengerAnimation" до бесконечности. Но мне эта анимация нужна навсегда, поскольку она представляет собой анимацию идущего пассажира/объекта, которая должна повторяться до тех пор, пока объект приближается к игроку.
Кто-нибудь знает, как решить эту проблему? Я действительно застрял.