【问题标题】:Get Direction Vector for entity in A-Frame获取 A-Frame 中实体的方向向量
【发布时间】:2018-03-07 14:49:17
【问题描述】:

我的 A-Frame 场景中有一个框,我想用键盘控制它。我希望 W、S 和箭头 Up/Down 控制向前和向后移动,并且我希望 A、D 和箭头 Left/Right 向左或向右旋转框。

我设法让盒子前后移动并让盒子旋转。问题是当盒子旋转时,我希望能够按前进/后退键将其向新方向移动,但现在它仍沿原始方向前后移动。

HTML

 <a-entity id="rover" geometry="primitive: box" material="color: yellow" position="0 1 -3">  

JS:

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)

我正在尝试获取一个方向向量并以某种方式使用它,但我现在很卡住。

【问题讨论】:

    标签: javascript web 3d aframe direction


    【解决方案1】:

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

    有几种方法可以解决这个问题,最直接的方法是使用 Object3D 的 translate 方法,该方法沿其标准化轴移动对象。而不是设置属性尝试调用

    rover.translateZ(# of units)

    等等。等。另见:

    How to move an object forward in Three.js?

    【讨论】:

    • 完美运行,非常感谢!似乎必须先将我的实体转换为对象才能使其正常工作。 var rover = document.getElementById('rover').object3D;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多