我想让坦克的炮塔在自上而下的视角下用鼠标瞄准。我已经写了一些代码来动画旋转到给定的角度:
void Tank::rotateTurret(float angle) {
turretRotation += angle;
}
sf::Sprite turret;
void Tank::update(unsigned int time) {
if (turretRotation != 0.0f) {
float rotate;
if (turretRotation > 0.0f) {
rotate = turretRotationSpeed * time;
if (rotate > turretRotation) {
rotate = turretRotation;
turretRotation = 0;
}
else
turretRotation -= rotate;
}
else {
rotate = -turretRotationSpeed * time;
if (rotate < turretRotation) {
rotate = turretRotation;
turretRotation = 0;
}
else
turretRotation -= rotate;
}
turret.rotate(rotate);
}
}我可以计算鼠标指针相对于左上角的角度:
void TankPlayerController::update() {
sf::Vector2i mousePosition = sf::Mouse::getPosition(*relativeWindow);
sf::Vector2i mouseMovement = mousePosition - lastMousePosition;
if (mouseMovement.x != 0 || mouseMovement.y != 0) {
float mouseAngle = VectorAngleDeg(mousePosition.x, mousePosition.y);
tank->rotateTurret(???);
lastMousePosition = mousePosition;
}
}但我不知道如何将它们组合在一起。应该怎么做呢?
发布于 2015-08-02 01:20:40
您需要计算从左上角( ULHC )到转塔中心(CoT)的角度,以及从ULHC到鼠标位置的角度。接下来考虑将ULHC连接到CoT的线形成的三角形,将ULHC连接到鼠标指针位置的线,以及将CoT连接到鼠标指针位置的线。由于您知道从ULHC到CoT的距离和从ULHC到鼠标指针位置的距离,所有您需要做的就是确定到CoT的角度和鼠标指针位置之间的差异,您可以使用余弦定律来获得ULHC和鼠标在转塔位置之间的角度,以及从那里到您选择的任意轴的角度。
有一张图片会更简单:|
https://stackoverflow.com/questions/31763773
复制相似问题