Игра от первого лица Three.js - Управление - Перемещение камеры - PullRequest
0 голосов
/ 10 июня 2018

Я хочу создать 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 (слева)?

...