带有Aframe-Physical-System的A框架-地址来自javsascript的大炮元素吗?

时间:2019-03-14 15:06:11

标签: three.js physics aframe

我处于A帧场景中,使用其底层的three.js创建如下对象:

var boxMaterial = new THREE.MeshPhongMaterial( { map: boxTexture, side: THREE.BackSide, bumpMap: boxBumpMap } );
var boxGeometry = new THREE.BoxBufferGeometry( 20, 20, 20 );
var box01 = new THREE.Mesh(boxGeometry, boxMaterial);
scene.add(box01);

我如何使用javascript处理Aframe-physics-system的基础Cannon.js以添加StaticBody属性?

1 个答案:

答案 0 :(得分:2)

我非常确定您不能将DOM属性添加到js非DOM对象(例如THREE对象)中。

static body属性实际上是在创建一个新对象(CANNON.Body的{​​{1}}设置为type)。 Cannon.Body.STATIC所做的是同步-与 Cannon.Body THREE.js网格

源代码:主体创建here,并同步here

您可以创建一个 CANNON.Body 并将其位置与您的盒子同步,但是我会采取不同的方法:

您可以使用具有Physical属性的空aframe-physics实体:

a-frame

但在<a-entity position="0 2 -3" three-setup dynamic-body></a-entity> 组件中设置了材料和几何形状:

a-frame

在我的fiddle

中查看

正如Don McCurdy所指出的那样,拥有自定义AFRAME.registerComponent("three-setup", { init: function() { var boxMaterial = new THREE.MeshPhongMaterial({ side: THREE.FrontSide, }); var boxGeometry = new THREE.BoxBufferGeometry(1, 1, 1); var box01 = new THREE.Mesh(boxGeometry, boxMaterial); this.el.setObject3D('mesh', box01) } }) 组件具有更多优势:
-您可以收听a-frame事件,该事件会在body-loaded初始化时通知您
-通过简单的参考即可访问它:CANNON.Body


否则,您将需要创建一个this.el.body,然后在每个渲染循环上将其位置和旋转应用于框。