Плавное изменение направления импульса SKPhysicsBody.

У меня есть SKPhysicsBody в моей сцене, к которой я применяю импульс всякий раз, когда пользователь нажимает кнопку, чтобы заставить ее двигаться вперед. Из-за своих свойств он не сильно двигается одним нажатием и довольно быстро замедляется, однако при многократном нажатии он, как и ожидалось, набирает скорость.

У меня есть еще одна кнопка, которую пользователь может нажать, чтобы тело могло изменить свое направление. Моя текущая реализация применяет к телу угловой импульс, чтобы повернуть его — опять же, свойства тела означают, что если пользователь быстро нажмет кнопку поворота несколько раз, то телу потребуется больше времени, чтобы остановить вращение.

В настоящее время, когда тело вращается, его импульс не меняет направление (чего я и ожидал от любой физической библиотеки). кнопку вперед, чтобы попытаться замедлить предыдущий импульс. Конечно, на высоких скоростях кузов кажется заносным.

Как я могу реализовать более «автомобильную» физику тела? «Автомобильный» в том, что при вращении тела его импульс плавно обновляется на каждом интервале в новом направлении. Можно ли это сделать просто или нужно использовать временную веревку, гравитационное поле или вихрь?

Диаграмма говорит 2000 слов


person Max Chuquimia    schedule 01.08.2016    source источник
comment
Вы пробовали применить Force(_:at:)?   -  person Simone Pistecchia    schedule 01.08.2016
comment
@SimonePistecchia Это не имеет большого значения :(   -  person Max Chuquimia    schedule 03.08.2016


Ответы (1)


Применение силы или импульса в SpriteKit применяется с точки зрения глобальной системы координат, а не локальной системы координат целевого узла.

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

person cpimhoff    schedule 03.08.2016
comment
Правильно, у меня это уже хорошо работает, мой вопрос об изменении направления импульса, а не о том, как применять импульсы в прямом направлении. - person Max Chuquimia; 04.08.2016
comment
Извините, я неправильно понял. Вы можете добиться результата, вращая свойство velocity тела, чтобы оно соответствовало свойству автомобиля всякий раз, когда вы его вращаете. - person cpimhoff; 04.08.2016
comment
на самом деле это звучит разумно, единственное, что нужно сделать, это сделать его плавным. Думаю, я мог бы проверять свойство вращения автомобиля при каждом обновлении и изменять его скорость, чтобы соответствовать, хотя это звучит неэффективно. - person Max Chuquimia; 04.08.2016