自上而下的透视目标坦克炮塔与鼠标

时间:2015-08-01 16:31:05

标签: c++ 2d game-engine sfml

我想让坦克的炮塔以自上而下的方式用鼠标瞄准。我已经编写了一些代码来将旋转设置为给定角度:

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;
    }
}

但我不知道如何将它们组合在一起。应该怎么做?

1 个答案:

答案 0 :(得分:1)

您需要计算从左上角(ULHC)到炮塔中心(CoT)的角度以及从ULHC到鼠标位置的角度。接下来考虑由连接ULHC和CoT的线形成的三角形,连接ULHC和鼠标指针位置的线以及将CoT连接到鼠标指针位置的线。既然您知道从ULHC到CoT的距离以及从ULHC到鼠标指针位置的距离,您需要做的就是确定与CoT的角度和鼠标指针位置之间的差异,您可以使用余弦定律来获得ULHC和炮塔上鼠标位置之间的天使,并从那里获得任意轴的角度。

使用图片会更容易:|