Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js 第一人称游戏3.js-控制-移动相机_Three.js_Camera - Fatal编程技术网

Three.js 第一人称游戏3.js-控制-移动相机

Three.js 第一人称游戏3.js-控制-移动相机,three.js,camera,Three.js,Camera,我想用Three.JS创建一个第一人称3D游戏。控件为WASD。我有向前移动(W)、向后移动(S)、左转(A)和右转(D)的键。 在这段代码中,我解释了控件背后的逻辑。三角洲的作用是告知相机的观察方向,这样当它向前或向后移动时,它就会朝那个方向移动。这就是我遇到的问题 //variables var pi = Math.PI; //just because I use PI a lot //controls var moveForward = false; var turnLeft =

我想用Three.JS创建一个第一人称3D游戏。控件为WASD。我有向前移动(W)、向后移动(S)、左转(A)和右转(D)的键。 在这段代码中,我解释了控件背后的逻辑。三角洲的作用是告知相机的观察方向,这样当它向前或向后移动时,它就会朝那个方向移动。这就是我遇到的问题

//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;
    }

}
//变量
var-pi=Math.pi//只是因为我经常用圆周率
//控制
var向前移动=错误;
var左转=假;
var-moveBackward=false;
var-turnRight=false;
//德雷西奥
var deltaZ=pi;
增值税=0;
var increaseDeltaX=真;
var incremasedeltaz=false;
/*为关键点添加摄影机、场景和eventListener的代码。单击所提到的键时,对应的var变为true*/
函数animate(){
//点击W
如果(向前移动){
camera.position.z+=deltaZ/pi;
camera.position.x-=deltaX/pi;
//我使用delta/pi,因为如果delta=pi camera.position.z将增加1
}
//点击S
如果(向后移动){
camera.position.z-=deltaZ/pi;
camera.position.x+=deltaX/pi;
}
//点击D
如果(右转){
camera.rotation.y+=pi/300;//单击300次将旋转180度
//deltaZ以π开始并逐渐减小,它在π和-π之间变化
如果(增量Deltaz){
deltaZ+=pi/150;//150=300/2;pi=90度=180/2
}否则{
deltaZ-=pi/150
}
如果(deltaZ>=pi){
增量deltaz=false;
}else if(deltaZ=pi){
increaseDeltaX=false;

}否则如果(deltaX我建议您使用以下示例作为自己代码的起始模板。它使用指针锁定API,非常适合第一人称3D游戏:这不起作用,因为我需要在游戏中看到老鼠。我已经检查了代码,但它用老鼠而不是键盘转动相机,我不知道如何调整我的代码。)T