Tôi khá mới để phát triển trò chơi và đã mô hình thành công một địa hình 3D, và có một máy ảnh có thể tự do di chuyển trong thế giới trò chơi, nhưng tôi đã chạy vào một snag rằng tôi không thể tìm ra.Xử lý strafing/side bước trong một trò chơi 3D
Hiện nay, để tiến về phía trước/ngược tôi có phương pháp như sau:
void Player::moveForward(const float speed)
{
Vector3 pos = getPosition();
float cosYaw = cosf(degreesToRadians(m_yaw));
float sinYaw = sinf(degreesToRadians(m_yaw));
pos.x += float(cosYaw)*speed;
pos.z += float(sinYaw)*speed;
setPosition(pos);
}
đâu Vector3 là một X đơn giản, Y, Z struct, và độ sang radian là:
inline float degreesToRadians(const float degrees) {
const float PIOver180 = 3.14159f/180.0f;
return degrees * PIOver180;
}
Để xử lý di chuyển về phía trước Tôi chỉ đơn giản là đặt một phao dương vào đối số, và để di chuyển ngược một phao âm.
này cho phép tôi dĩ nhiên di chuyển về phía trước và ngược - Tôi cũng có thể di chuyển lên trên bằng cách thay đổi pos.y
của vị trí tuy nhiên tôi không thể tìm ra cách để bước bên/Strafe trái và phải.
Lật các số x
và z
dẫn đến việc có thể thực hiện bước tiếp theo với điều kiện là 360/0, 270, 180 hoặc 90, tuy nhiên, bất kỳ vị trí nào giữa các góc này cũng khiến máy ảnh chuyển tiếp/lùi hoặc di chuyển về phía trước/ngược.
Dù sao, điều này đã làm phiền tôi vì vậy tôi đã cố gắng để tìm một giải pháp trên giấy - điều này làm việc:
inline float degreesToStrafe(const float degrees)
{
const float PIOver90 = 3.14159f/90.0f;
return degrees * PIOver90;
}
Tuy nhiên, trong trò chơi này là chính xác giống như trao đổi các x
và z
kết quả.
Mọi trợ giúp sẽ được đánh giá cao; Tôi đấu tranh để tìm thấy bất cứ điều gì trên web liên quan đến điều này tuy nhiên nó có thể tôi đã chỉ tìm kiếm không chính xác!
Cảm ơn bạn rất nhiều! – krslynx
Hoàn hảo. Thanks =] – Hobbes