2014-02-06 119 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());