c++ - Box2d - 计算速度和角度冲量时出现问题

标签 c++ box2d physics

我有一把武器,当它击中下一个敌人时,它会弹跳到下一个敌人身上。

我首先计算增量并获取角度:

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/

相关文章:

c++ - 迭代并从 std::map 中删除某些元素时出现段错误?

c++ - 不同命名空间 C++ 中类的循环依赖

java - 在 Box 2D 中为一袋液体建模

unity-game-engine - 每帧检查多个球之间碰撞的快速方法

c# - 跳跃比。重力

c++ - 如何改进此代码以便多线程运行?

c++ - const 正确性和模板参数

java - 无法设置 PolygonShape 顶点 Box2D

c++ - box2d:在 ResetMassData 上获取 SIGABRT,b2Assert(m_I > 0.0f) - 中心惯性、质心

c - 如何使用graphics.h函数用c实现弹跳球?