Box2d - 用速度和角度计算脉冲的问题

时间:2014-02-06 00:56:18

标签: c++ box2d physics

我有一种武器在它击中时会反弹到下一个敌人身上。

我首先从计算delta和获得角度开始:

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());

问题是向量必须不正确,因为子弹没有朝正确的方向发展。如果我只是将角度输出到下一个敌人,它往往会输出一个看起来正确的角度,所以问题必须是转换为矢量。

1 个答案:

答案 0 :(得分: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() );