我有一种武器可以在下一个敌人击中时反弹。

我首先从计算增量和获取 Angular 开始:

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;

然后,我将 Angular 转换为 vector ,并将其乘以15(射弹的速度):
b2Vec2 vec = b2Vec2(cos(angle*M_PI/180),sin(angle*M_PI/180));
vec *= 15.0f;

最后,我将脉冲应用于 body :
m_body->ApplyLinearImpulse(vec, m_body->GetPosition());

问题在于 vector 必须不正确,因为子弹无法正确朝正确的方向前进。如果我仅将 Angular 输出到下一个敌人,则它倾向于输出看起来正确的 Angular ,因此问题一定在于转换为 vector 时。

最佳答案

我认为您不需要在这里使用任何三角函数,因为您已经掌握了方向:

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

09-26 22:25