Я хочу создать 3D-игру от первого лица с Three.JS.Управление WAS D. У меня есть клавиши, предназначенные для движения вперед (W), движения назад (S), поворота влево (A) и поворота вправо (D).В этом коде я объясняю логику элементов управления.Porpuse дельт - это информирование о том, в каком направлении смотрит камера, чтобы при движении вперед или назад она двигалась в этом направлении.Вот с чем у меня проблемы.
//variables
var pi = Math.PI; //just because I use PI a lot
//controls
var moveForward = false;
var turnLeft = false;
var moveBackward = false;
var turnRight = false;
//direção
var deltaZ = pi;
var deltaX = 0;
var increaseDeltaX = true;
var increaseDeltaZ = false;
/*code adding the camera, the scene and eventListener for the keys. When the keys mentioned are clicked the corresponded var turns true*/
function animate() {
//clicking W
if (moveForward) {
camera.position.z += deltaZ/pi;
camera.position.x -= deltaX/pi;
//I used delta/pi because if delta=pi camera.position.z will increase 1
}
//clicking S
if (moveBackward) {
camera.position.z -= deltaZ/pi;
camera.position.x += deltaX/pi;
}
//clicking D
if (turnRight) {
camera.rotation.y += pi/300; //clicking 300 times will spin 180 degrees
//deltaZ starts in pi and decreasing, it varies between pi and -pi
if (increaseDeltaZ) {
deltaZ += pi / 150; //150= 300/2; pi= 90 degrees = 180/2
} else {
deltaZ -= pi / 150
}
if (deltaZ >= pi) {
increaseDeltaZ = false;
} else if (deltaZ <= -pi) {
increaseDeltaZ = true;
}
//deltaX starts in 0 and increasing, it varies between pi and -pi
if (increaseDeltaX) {
deltaX += pi / 150;
} else {
deltaX -= pi / 150;
}
if (deltaX >= pi) {
increaseDeltaX = false;
} else if (deltaX <= -pi) {
increaseDeltaX = true;
}
}
Этот код хорошо работает.Когда я поворачиваю направо, а затем двигаюсь вперед, камера движется в правильном направлении.Проблема в том, когда я поворачиваю камеру влево.Я попытался просто отменить вычисления, но значения просто испортились, и дельты перешли в пи, и направления стали неправильными.Что мне вставить в if (слева)?