我正在尝试建立一个简单的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>
答案 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上询问它。希望对您有所帮助,祝您编程愉快))