Javascript 获取A帧中实体的方向向量

Javascript 获取A帧中实体的方向向量,javascript,web,3d,aframe,direction,Javascript,Web,3d,Aframe,Direction,我的a帧场景中有一个框,我想用键盘控制它。我想要W、S和上/下箭头来控制向前和向后移动,我想要A、D和左/右箭头来向左或向右旋转长方体 我已经设法使箱子前后移动,并使箱子旋转。问题是,当长方体旋转时,我希望能够按前进/后退键将其移动到新方向,但现在它仍在原始方向上前后移动 HTML 我试图得到一个方向向量,并以某种方式使用它,但我现在陷入了困境。基本问题是你要设置对象在世界空间中的位置,而不是沿着它自己的对象空间坐标移动它 有几种方法可以实现这一点,最直接的方法是使用Object3D的trans

我的a帧场景中有一个框,我想用键盘控制它。我想要W、S和上/下箭头来控制向前和向后移动,我想要A、D和左/右箭头来向左或向右旋转长方体

我已经设法使箱子前后移动,并使箱子旋转。问题是,当长方体旋转时,我希望能够按前进/后退键将其移动到新方向,但现在它仍在原始方向上前后移动

HTML


我试图得到一个方向向量,并以某种方式使用它,但我现在陷入了困境。

基本问题是你要设置对象在世界空间中的位置,而不是沿着它自己的对象空间坐标移动它

有几种方法可以实现这一点,最直接的方法是使用Object3D的translate方法,该方法沿对象的规范化轴移动对象。不要设置属性,而是尝试调用

rover.translateZ(#单位)

等等。另见:


非常好用,谢谢!必须先将我的实体转换成一个对象,才能让它看起来正常工作<代码>var-rover=document.getElementById('rover').object3D
 <a-entity id="rover" geometry="primitive: box" material="color: yellow" position="0 1 -3">  
var up = false,
    right = false,
    down = false,
    left = false;

document.addEventListener('keydown',press)
function press(e){
  if (e.keyCode === 38 /* up */ || e.keyCode === 87 /* w */ || e.keyCode === 90 /* z */){
    up = true
  }
  if (e.keyCode === 39 /* right */ || e.keyCode === 68 /* d */){
    right = true
  }
  if (e.keyCode === 40 /* down */ || e.keyCode === 83 /* s */){
    down = true
  }
  if (e.keyCode === 37 /* left */ || e.keyCode === 65 /* a */ || e.keyCode === 81 /* q */){
    left = true
  }
}


document.addEventListener('keyup',release)
function release(e){
  if (e.keyCode === 38 /* up */ || e.keyCode === 87 /* w */ || e.keyCode === 90 /* z */){
    up = false
  }
  if (e.keyCode === 39 /* right */ || e.keyCode === 68 /* d */){
    right = false
  }
  if (e.keyCode === 40 /* down */ || e.keyCode === 83 /* s */){
    down = false
  }
  if (e.keyCode === 37 /* left */ || e.keyCode === 65 /* a */ || e.keyCode === 81 /* q */){
    left = false
  }
}


function gameLoop(){
  var rover = document.getElementById('rover');
    var currentPosition = rover.getAttribute('position');
    var currentRotation = rover.getAttribute('rotation');


    var direction = new THREE.Vector3(0, currentRotation.y, currentPosition.z);


  if (up){
  rover.setAttribute("position", {x: 0, y: 1, z: (currentPosition.z - 0.1)});
  }
  if(down){
       rover.setAttribute("position", {x: 0, y: 1, z: (currentPosition.z + 0.1)});
  }
  if(left){
       rover.setAttribute("rotation", {x: 0, y: (currentRotation.y + 1), z: 0});
  }
  if(right){
      rover.setAttribute("rotation", {x: 0, y: (currentRotation.y - 1), z:  0});
  }



requestAnimationFrame(gameLoop)
}
 requestAnimationFrame(gameLoop)