Javascript 第一人称WASD控制

Javascript 第一人称WASD控制,javascript,3d,html5-canvas,controls,game-physics,Javascript,3d,Html5 Canvas,Controls,Game Physics,我目前正在开发一个3d游戏,我想用wasd键实现一种第一人称控制 下面我的代码片段包括速度、位置和旋转,其中旋转表示介于0和2*Math.PI之间的值 我的问题是如何更新我的代码,以使用w-键根据当前旋转“笔直”,使用d键返回,无论我面向何处,等等 我相信你已经知道我的问题所在了-我需要某种方法来实现加速 任何帮助都将不胜感激 让速度=0.01, 最大速度=0.01, 摩擦=0.91 让位置={ x:0,, y:0, z:0 }, 速度={ x:0,, y:0, z:0 }, 旋转=0; 让我

我目前正在开发一个3d游戏,我想用wasd键实现一种第一人称控制

下面我的代码片段包括速度、位置和旋转,其中旋转表示介于
0
2*Math.PI
之间的值

我的问题是如何更新我的代码,以使用w-键根据当前旋转“笔直”,使用d键返回,无论我面向何处,等等

我相信你已经知道我的问题所在了-我需要某种方法来实现加速

任何帮助都将不胜感激

让速度=0.01,
最大速度=0.01,
摩擦=0.91
让位置={
x:0,,
y:0,
z:0
},
速度={
x:0,,
y:0,
z:0
},
旋转=0;
让我们更新=()=>{
如果(按下键(“w”)&&velocity.z>-maxSpeed)velocity.z-=速度
如果(按下键(“s”)和&velocity.z-maxSpeed)速度.x-=速度
如果(按下键(“d”)和&velocity.x
这里是固定版本:

position.z += velocity.z * Math.cos(rotation);
position.x += velocity.z * Math.sin(rotation); 
position.z -= velocity.x * Math.sin(rotation); 
position.x += velocity.x * Math.cos(rotation);
单击进入代码段以转移焦点,然后使用
WSAD


var scene=new THREE.scene();
var摄像机=新的三透视摄像机(75,内宽/内高,0.011000);
摄像机位置设置(0,3,0);
var renderer=new THREE.WebGLRenderer();
设置大小(innerWidth,innerHeight);
document.body.appendChild(renderer.doElement);
添加(新的三个.GridHelper(5001000x6666660x4444));
假设速度=0.1,最大速度=0.1,摩擦力=0.91,
位置={x:0,y:0,z:0},
速度={x:0,y:0,z:0},
旋转=0,按键={};
让我们更新=()=>{
如果(按键[“w”]&&velocity.z>-maxSpeed)速度.z-=速度;
如果(按键[“s”]&&velocity.z-maxSpeed)速度.x-=速度;
如果(按键[“d”]&&velocity.xkeyPressed[e.key]=true)
addEventListener('keyup',e=>keyPressed[e.key]=false)
addEventListener('mousemove',e=>rotation=e.x*Math.PI*2/innerWidth)
addEventListener('resize',e=>renderer.setSize(innerWidth,innerHeight))
函数render(){
camera.rotation.y=旋转;
camera.position.x=position.x;
camera.position.z=position.z;
请求动画帧(渲染);
渲染器。渲染(场景、摄影机);
}

body,canvas{overflow:hidden;margin:0;}
谢谢,但您的答案并不完全匹配,因为我得到的是一个旋转Y值,而不是θ、φ等。崩溃就好了@陌生人在问伟大的答案!您如何更新
旋转