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

时间:2018-09-24 03:31:22

标签: rotation aframe

我正在尝试建立一个简单的a帧物理演示,并在单击时重播。遵循Aframe物理系统和Orange Shooter演示的基本示例,我已将事情简化为下面的代码,除了rotation.set动作外,它似乎还可以正常工作。该块可以很好地重置位置,速度和angularVelocity,但不会像看起来那样更新旋转。浏览器控制台消息为未捕获的TypeError:无法读取未定义的属性'set'

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

<html>
  <head>
    <script src="https://aframe.io/releases/0.8.2/aframe.min.js"></script>
    <script src="https://unpkg.com/aframe-physics-system@1.4.0/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 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

这似乎可行:

internal void Update(id, parentId, name)
{
 ...
}

显然,在添加物理场时,必须使用四元数进行旋转,它看起来像覆盖了自然旋转。这适用于从度数(45,45,0)中获得一个:

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

然后:

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);

其中 e 是欧拉,而 q 是四元数。同样,以下结果也可以工作,尽管结果并不能满足您的需求:

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

可能应该在A框架github上询问它。希望对您有所帮助,祝您编程愉快))