Box2d:如何获取光标位置以将速度应用于该方向的动态物体?
Box2d: How to get cursor position to apply a velocity to a dynamic body in that direction?
我想在光标方向将速度矢量应用于动态物体:
void Game::mousePressEvent(QMouseEvent *e){
double angle = atan2(realBall->GetPosition().y - e->pos().y(), realBall->GetPosition().x - e->pos().x());
realBall->SetLinearVelocity(b2Vec2(-cos(angle) * 50, -sin(angle) * 50));
}
但是动体的方向不正确,所以我认为光标位置是错误的。
感谢您的帮助!
首先,您必须知道,为了让您的代码正常工作,您的屏幕坐标和 box2d 的坐标必须匹配。请注意,如果您使用以像素为单位的屏幕坐标,则意味着一个像素的大小与 box2d 中的 1 米相匹配。但让我们假设您已经考虑了所有这些。那我就不建议你用三角函数来计算了。所以你很容易犯错误。在这种情况下,简单的矢量操作对您来说就足够了:矢量减法、缩放和归一化。你可以试试这个:velocity = (cursor_position - real_ball_position).normalize().scale(50f)。在 box2d 中有一个 b2Vec class 用于向量运算。您可以在文档中详细了解它。
我想在光标方向将速度矢量应用于动态物体:
void Game::mousePressEvent(QMouseEvent *e){
double angle = atan2(realBall->GetPosition().y - e->pos().y(), realBall->GetPosition().x - e->pos().x());
realBall->SetLinearVelocity(b2Vec2(-cos(angle) * 50, -sin(angle) * 50));
}
但是动体的方向不正确,所以我认为光标位置是错误的。
感谢您的帮助!
首先,您必须知道,为了让您的代码正常工作,您的屏幕坐标和 box2d 的坐标必须匹配。请注意,如果您使用以像素为单位的屏幕坐标,则意味着一个像素的大小与 box2d 中的 1 米相匹配。但让我们假设您已经考虑了所有这些。那我就不建议你用三角函数来计算了。所以你很容易犯错误。在这种情况下,简单的矢量操作对您来说就足够了:矢量减法、缩放和归一化。你可以试试这个:velocity = (cursor_position - real_ball_position).normalize().scale(50f)。在 box2d 中有一个 b2Vec class 用于向量运算。您可以在文档中详细了解它。