Soy bastante nuevo en el desarrollo de juegos y he modelado con éxito un terreno en 3D, y tengo una cámara que puede moverse libremente en el mundo del juego, sin embargo me he encontrado con un problema que no puedo descifrarManejo de ametrallamiento/paso lateral en un juego 3D
Actualmente, para mover hacia delante/hacia atrás tengo métodos como sigue:
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);
}
Dónde Vector3 es un simple X, Y, Z struct, y grados a radianes es:
inline float degreesToRadians(const float degrees) {
const float PIOver180 = 3.14159f/180.0f;
return degrees * PIOver180;
}
Para manejar hacia adelante simplemente coloco un flotador positivo en el argumento, y hacia atrás un flotante negativo.
Esto me permite, por supuesto, avanzar y retroceder - También puedo mover hacia arriba cambiando el pos.y
de la posición, sin embargo, no puedo entender cómo dar un paso lateral/atacar a la izquierda y a la derecha.
voltear los resultados x
y z
en mí ser capaz de paso lateral proporcionado la guiñada es 360/0, 270, 180 o 90 sin embargo en cualquier lugar entre ellos ángulos hace que la cámara con visión de paso lateral/hacia atrás-sidestep o mover hacia delante/hacia atrás.
De todos modos, esto me había estado molestando así que trató de encontrar una solución en el papel - esto funcionó:
inline float degreesToStrafe(const float degrees)
{
const float PIOver90 = 3.14159f/90.0f;
return degrees * PIOver90;
}
Sin embargo, en este juego es exactamente el mismo que el intercambio de los resultados x
y z
.
Cualquier ayuda sería muy apreciada; ¡Luché para encontrar algo en la web con respecto a esto, sin embargo, es posible que solo estuviera buscando incorrectamente!
¡Muchas gracias! – krslynx
Perfecto. Gracias =] – Hobbes