我正在製作一個簡單的遊戲,您可以在點擊大平面(地面)時在raycaster(鼠標)位置添加對象(立方體)。我不希望那些物體(立方體)可以放在彼此之間。我做了一個簡單的碰撞檢測。我知道這不是最好的辦法,但這是我明白我在做什麼的方式。我是一名初學者。Three.js碰撞檢測問題
在下面的代碼中,我檢查兩個對象的位置。通過這些位置,我檢查它們之間的距離。如果距離小於4098(最大爲64 * 64),則將該對象添加到場景中。
function onDocumentMouseDown(event) {
event.preventDefault();
mouse.x = (event.clientX/renderer.domElement.clientWidth) * 2 - 1;
mouse.y = - (event.clientY/renderer.domElement.clientHeight) * 2 + 1;
raycaster.setFromCamera(mouse, camera);
var intersects = raycaster.intersectObjects(clickObjects);
var intersects2 = raycaster.intersectObjects(objects);
if (intersects.length > 0) { // Clicking on the ground?
if (intersects2.length > 0) { // Clicking on an object?
}else{
var geometry = new THREE.BoxGeometry(64, 64, 64);
var cube = new THREE.Mesh(geometry, new THREE.MeshBasicMaterial({ color: 0xFBF5D7, opacity: 1 }));
cube.position.copy(intersects[0].point);
cube.position.y = 30;
cube.flipSided = true;
cube.doubleSided = true;
var validposition = true;
var i;
for (i = 0; i < objects.length; i++) {
var dx = cube.position.x - objects[i].position.x;
var dy = cube.position.y - objects[i].position.y;
var dz = cube.position.z - objects[i].position.z;
var distance = dx*dx+dy*dy+dz*dz;
if(distance < 4096) {
validposition = false;
}
}
if(validposition == true) {
objects.push(cube);
scene.add(cube);
}
}
}
}
問題是,這隻適用於它是一個方形對象。任何人都可以幫助我如何以這種方式來思考像THREE.BoxGeometry(64, 64, 400)
這樣的矩形對象嗎?謝謝
謝謝。這個例子確實有幫助。我明白你做了什麼。我嘗試使用此代碼。現在我計算出如何使用parseInt(cube.style.left);爲我的對象 –