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