2014-02-06 1 views
2

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

я сначала начинаю путем вычисления дельты и получать угол:

float deltaX = e->m_body->GetPosition().x - m_body->GetPosition().x; 
float deltaY = e->m_body->GetPosition().y - m_body->GetPosition().y; 

float angle = atan2((deltaY), deltaX) * 180/M_PI; 

Затем я преобразовать угол к вектору и умножить его на 15 (скорость снаряда):

b2Vec2 vec = b2Vec2(cos(angle*M_PI/180),sin(angle*M_PI/180)); 
vec *= 15.0f; 

Наконец, я применяю импульс к телу:

m_body->ApplyLinearImpulse(vec, m_body->GetPosition()); 

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

ответ

2

Я не думаю, что вам нужно использовать какую-либо функцию тригонометрии здесь, потому что у вас уже есть направление:

b2Vec2 direction = e->m_body->GetPosition() - m_body->GetPosition(); 
direction.Normalize(); // this vector now has length 1 

float speed = ...; 
m_body->ApplyLinearImpulse(speed * direction, m_body->GetWorldCenter()); 
Смежные вопросы