我正在尝试使用 FirstPersonControls.js 为移动编写一个 3d 环境,并为 mouseclick 侦听器编写以下内容:
function onDocumentMouseDown(event) {
event.preventDefault();
var vector = new THREE.Vector3((event.clientX / window.innerWidth) * 2 - 1, -(event.clientY / window.innerHeight) * 2 + 1, 0.5);
projector.unprojectVector(vector, camera);
var raycaster = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize());
var intersects = raycaster.intersectObjects(adblocks);
if (intersects.length > 0) {
intersects[0].object.material.color.setHex(Math.random() * 0xffffff);
}
}
在 init() 中:
document.addEventListener('mousedown', onDocumentMouseDown, false);
我已经在另一个文档上完成了此操作,并且效果很好,但是,这次我尝试包含 FirstPersonControls.js。
在 FirstPersonControls.js 中,我通过注释掉侦听器禁用了 mousedown 和 mouseup 侦听器,如下所示:
//this.domElement.addEventListener( 'mousedown', bind( this, this.onMouseDown ), false );
//this.domElement.addEventListener( 'mouseup', bind( this, this.onMouseUp ), false );
那工作得很好。FirstPersonControls.js 本身可以正常工作。但是,当我为 MouseDown 事件添加额外的侦听器时,键输入(w、a、s、d、q、r 和 f)停止响应。如果我在页面加载时立即按住一个键,该键将一直工作,直到我停止,然后一切都停止响应。另外,我不明白的另一件事,这可能是相关的,这就是我提到它的原因,如果我在 FirstPersonControls.js 中注释掉这一行:
this.domElement.addEventListener( 'mousemove', bind( this, this.onMouseMove ), false );
什么都没有改变。一切都保持完全相同,这对我来说没有意义,因为我认为那是 mousemovement 事件绑定到文档的地方。