Javascript Three.js Physijs是否将网格移向鼠标?

Javascript Three.js Physijs是否将网格移向鼠标?,javascript,three.js,physijs,Javascript,Three.js,Physijs,所以我一直在筛选这里的帖子和文档,试图找出如何让BoxMesh基本上跟随鼠标。最后,我会做操纵杆触摸控制,类似于战利品英雄,或其他使用触摸操纵杆的游戏。但现在我想确保方向速度能正常工作 下面是我的鼠标按下事件: if (scene.mouseControls.isDown) { var coords = scene.mouseControls.screenCoords; var vector = new THREE.Vector3(); vector.set( ( scen

所以我一直在筛选这里的帖子和文档,试图找出如何让BoxMesh基本上跟随鼠标。最后,我会做操纵杆触摸控制,类似于战利品英雄,或其他使用触摸操纵杆的游戏。但现在我想确保方向速度能正常工作

下面是我的鼠标按下事件:

if (scene.mouseControls.isDown) {
  var coords = scene.mouseControls.screenCoords;
  var vector = new THREE.Vector3();

  vector.set(
    ( scene.mouseControls.screenCoords.x / window.innerWidth ) * 2 - 1,
    0.5,
    - ( scene.mouseControls.screenCoords.y / window.innerHeight ) * 2 + 1
  );
  vector.unproject(scene.camera);

  var p1 = this.mesh.position;
  var p2 = vector;
  var angle = Math.atan2(p2.x - p1.x, p2.z - p1.z);
  var velX = Math.sin(angle) * 20;
  var velZ = Math.cos(angle) * 20;

  console.log(vector.x, vector.z);

  this.mesh.setLinearVelocity(new THREE.Vector3(velX, 0, velZ));
}
else {
  this.mesh.setLinearVelocity(notMovingVector);
}
但是所发生的是,确定的速度似乎前后翻转,因此玩家非常紧张

下面是我如何设置鼠标坐标的:

window.addEventListener(activeEventList[POINTER_MOVE], function (e) {
  if (e.touches) {
    var t = e.touches[0];
    _this.screenCoords.x = t.clientX;
    _this.screenCoords.y = t.clientY;
  }
  else {
    _this.screenCoords.x = e.clientX;
    _this.screenCoords.y = e.clientY;
  }
});
不使用滚动偏移或任何东西,因为场景是全屏的

编辑


删除了以前的方向代码。使用atan2计算角度,并应用该角度。与我在2d游戏中所做的类似。

设法解决了这个问题。我改为使用atan2是朝着正确方向迈出的一步,但它需要返回multiplyScalar。问题是我用相机的X和Y值来计算距离。但从视觉上看,其X&Y覆盖的空间比飞机下方的空间要大

以下是我所做的:

if (scene.mouseControls.isDown) {
  var coords = scene.mouseControls.screenCoords;
  var vector = new THREE.Vector3();

  vector.set(
    ( scene.mouseControls.screenCoords.x / window.innerWidth ) * 2 - 1,
    - ( scene.mouseControls.screenCoords.y / window.innerHeight ) * 2 + 1,
    0.5
  );
  vector.unproject(scene.camera);

  var dir = vector.sub(scene.camera.position).normalize();
  var distance = - scene.camera.position.y / dir.y;

  var p1 = this.mesh.position;
  var p2 = scene.camera.position.clone().add(dir.multiplyScalar(distance));

  var angle = Math.atan2(p2.z - p1.z, p2.x - p1.x);
  var velX = Math.cos(angle) * 20;
  var velZ = Math.sin(angle) * 20;

  this.mesh.setLinearVelocity(new THREE.Vector3(velX, 0, velZ));
}

不管怎样,当你最终瞄准一个操纵杆时,你可以跳过鼠标,用箭头键来推动物体——这就是你使用操纵杆时要做的,对吗?如果你有一个可以在线测试和调试的工作演示,那么鼠标会发生什么事情就更容易理解了。。我还在试着读一点,但还没读到。不过应该足够简单。有了操纵杆控制的触摸屏,我计划做的是第一次触摸原点。然后从该原点向任意方向拖动是考虑的移动方向。触摸上的固定按钮可能是一种痛苦,尤其是在不同的设备尺寸上。好的,我明白了-之前你认为你的目标是一个触摸模拟虚拟游戏板棒样的小部件。我猜有点类似,在全方位的意义上,而不仅仅是上/下/左/右。