我有一把武器,当它击中下一个敌人时,它会弹跳到下一个敌人身上。
我首先计算增量并获取角度:
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;
然后我将角度转换为 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 一定不正确,因为子弹没有朝正确的方向前进。如果我只是将角度输出到下一个敌人,它往往会输出一个看起来正确的角度,因此问题一定出在 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() );
关于c++ - Box2d - 计算速度和角度冲量时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21591909/