我在使用 PhysiJS 和 Three JS 时遇到问题,我无法处理碰撞事件。
Github 上的存储库: https ://github.com/kevrmnd/soccer-physics (在 script.js 文件中)
我有一个地面和一个球,我在球上放了一个事件监听器,当它落在地上但没有输出时,它应该发出警报或记录一些东西。
这是我设置场景和重力的方法:
scene = new Physijs.Scene({ fixedTimeStep: 1 / 120 });
scene.setGravity( new THREE.Vector3( 0, -30, 0 ) );
这是我的理由:
loader = new THREE.TextureLoader();
// Materials
ground_material = Physijs.createMaterial(
new THREE.MeshStandardMaterial({ map: loader.load( 'img/grass.png' ) }),
1,
0.6
);
ground_material.map.wrapS = ground_material.map.wrapT = THREE.RepeatWrapping;
ground_material.map.repeat.set( 4, 4 );
// Ground
ground = new Physijs.BoxMesh(
new THREE.BoxGeometry( 30 , 1, 60 ),
ground_material,
0
);
ground.receiveShadow = true;
scene.add( ground );
最后是我的球:
shape_material = Physijs.createMaterial(
new THREE.MeshNormalMaterial(),
0.5, // low friction
0.8 // high restitution
);
shape = new Physijs.SphereMesh(
new THREE.SphereGeometry( 0.5, 25, 25 ),
shape_material,
0.75
);
shape.addEventListener( 'collision', function(){
alert( 'hey' );
} );
shape.position.z = 20;
scene.add( shape );
我真的不明白为什么这不会触发事件。我需要你的帮助 :-)