Получение Sprite для «следования» за другим Sprite в SpriteKit

Я изо всех сил стараюсь сделать простую игру в жанре «защита башни» самостоятельно (как для изучения SpriteKit, так и для того, чтобы окунуться в разработку игр в целом).

У меня работает большая часть игры, но моя проблема заключается в том, что башня «стреляет» по врагам, которые ходят по экрану.

Я не совсем уверен, как перейти к перемещению башенных «пуль» к противнику. Сам враг движется статически, точка за точкой, пока не достигнет конечной точки, где он умрет.

Однако пуля должна динамически смещать свой «путь», поэтому я не могу использовать метод moveTo(x:, y:) для ее перемещения, иначе это выглядит глупо (пуля будет двигаться по прямой линии туда, где был противник). при инициализации пули).

Я не уверен, что мне нужно реализовать пути (то есть CGPath), потому что, честно говоря, я не совсем понимаю, что такое CGPath. Так вот, я как-то застрял в том, в каком направлении идти.

Существует ли простая функция, позволяющая спрайту двигаться или «следовать» за другим спрайтом? (В этом случае, когда они сталкиваются, я могу просто удалить пулю).


person Su_toL    schedule 15.04.2016    source источник
comment
Проверьте это - Seeker & Target   -  person Whirlwind    schedule 15.04.2016
comment
Как раз собирался разместить ту же ссылку...   -  person Steve Ives    schedule 15.04.2016


Ответы (1)


Для каждого цикла обновления вычисляйте вектор от пули до позиции противника. Нормализуйте это до длины 1. Затем переместите маркер с помощью SKAction в конец этого вектора. Вам придется сделать некоторые расчеты с расстоянием, которое нужно пройти, и скоростью пули, чтобы определить, сколько времени займет SKAction. Вы можете использовать SKConstraint для автоматического поворота пули лицом к противнику.

Эти ссылки помогут с векторными вещами, но я попытаюсь опубликовать код позже:

https://www.raywenderlich.com/90520/trigonometry-games-sprite-kit-swift-tutorial-part-1

person Steve Ives    schedule 15.04.2016
comment
Вы также можете сделать это с ограничением расстояния, которое постоянно уменьшается... - person Steve Ives; 15.04.2016
comment
Вы также можете создать ограничение расстояния для следующего поведения: developerplayground.net/how-to-implement…и-свифт-часть-2/ - person Stefan; 15.04.2016