开发者问题收集

如何使用 document.querySelector 或其他脚本技术设置实体旋转?

2018-09-24
204

我正在尝试设置一个简单的 a-frame 物理演示,该演示在单击时重播。按照 aframe 物理系统和橙色射手演示中的基本示例,我将所有内容简化为下面的代码,除了 rotation.set 操作外,该代码似乎运行良好。该块可以正常重置位置、速度和 angularVelocity,但不会像它应该的那样更新旋转。浏览器控制台消息为 Uncaught TypeError: Cannot read property 'set' of undefined

在此脚本中设置旋转的最简单方法是什么?

<html>
  <head>
    <script src="https://aframe.io/releases/0.8.2/aframe.min.js"></script>
    <script src="https://unpkg.com/[email protected]/dist/aframe-physics-system.min.js"></script>
  </head>
  <body>
    <a-scene physics background="color: #ccddff">
      <a-box id="dropped" position="-1 4 -3" rotation="40 45 0" color="#5577D9" dynamic-body></a-box>
      <a-plane position="0 0 -4" rotation="-90 0 0" width="4" height="4" color="brown" static-body></a-plane>
    </a-scene>
  </body>
   <script>
    window.addEventListener('click', function () {
       // METHOD2 - MOVE THE EXISTING ORANGE
      document.querySelector("#dropped").body.position.set(-1, 4, -3);
      document.querySelector("#dropped").body.velocity.set(0, 0, 0);
      document.querySelector("#dropped").body.angularVelocity.set(0, 0, 0);
      document.querySelector("#dropped").body.rotation.set(40, 45, 0);
    });    
  </script>
</html>
2个回答

它是 document.querySelector("#dropped").components.body.body.position.set(-1, 4, -3);

Diego Marcos
2018-09-24

这似乎有效:

 document.querySelector("#dropped").body.quaternion.set(0.3535533905932738,0.3535533905932738,0.14644660940672624,0.8535533905932737);

显然,在添加物理时,您必须使用四元数进行旋转,它似乎会覆盖本机旋转。这适用于从度数 (45,45,0) 获取一个:

q=new THREE.Quaternion().setFromEuler(new THREE.Euler(THREE.Math.degToRad(45),THREE.Math.degToRad(45),0,'XYZ'));

然后:

document.querySelector("#dropped").body.quaternion.set(q.x,q.y,q.z,q.w);

但是 这两个 对我来说都不起作用:

document.querySelector("#dropped").body.quaternion=q
document.querySelector("#dropped").body.quaternion.setFromEuler(e)

其中 e 是欧拉, q 是四元数。以下方法也有效,尽管结果并不完全符合您的要求:

document.querySelector("#dropped").body.quaternion=document.querySelector("#dropped").body.initQuaternion;

应该在 A-frame github 上询问。希望这会有所帮助,祝您编码愉快 ))

Igor R
2018-09-26