【发布时间】:2015-08-01 16:31:04
【问题描述】:
我想让坦克的炮塔以自上而下的视角用鼠标瞄准。我已经编写了一些代码来动画旋转到给定的角度:
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;
}
}
但我不知道如何将它们组合在一起。应该怎么做?
【问题讨论】:
-
你会被炸飞的:(
-
您可能需要考虑使用模数,以确保您的角度永远不会变得太大:
#include <cmath>, turretRotation = std::fmod(turretRotation + angle, M_PI);或使用其他获取 pi 的方式(例如constexpr float pi() { return std::acos(-1.0f); })。尽管它在大多数库中都有定义,但我认为 M_PI 已经不在标准中了。
标签: c++ 2d game-engine sfml