Как создать ротационный импульсный вектор (Cocos2d, Chipmunk, Spacemanager) - PullRequest
3 голосов
/ 04 марта 2011

Поэтому я пытаюсь создать персонажа с двумя реактивными ранцами, каждый из которых может быть запущен независимо друг от друга, чтобы создать импульсное смещение от центра тяжести (используя Cocos2d, Chipmunk и SpaceManager).

Myпроблема в том, что по умолчанию импульсная функция не учитывает текущее вращение объекта (то есть в каком направлении он направлен), поэтому смещение импульса и направление, которое я использую, заканчиваются тем же, независимо от того, какое направление символа

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

Я слышал, как люди писали о мировом пространстве против относительных координат тела и о том, как импульс является мировым пространством по умолчанию, и относительное тело решило бы мою проблему.Это правда?Если да, как вы конвертируете между этими двумя системами координат?

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

1 Ответ

1 голос
/ 25 марта 2011

Если у вас есть текущий курс вашего персонажа (угол, на который он повернулся, вращается против часовой стрелки), сохраненный в theta, и ваш импульсный вектор в ix и iy, то мировое пространствовектор будет

ix_world = ix * cos(theta) - iy * sin(theta);
iy_world = ix * sin(theta) + iy * cos(theta);

Угол theta должен быть в радианах, чтобы cos и sin работали правильно.Если вам нужно преобразовать градусы в радианы, умножьте угол на PI / 180.0.

Если вы хотите увидеть, откуда появилась эта формула, прочитайте здесь .

...