У меня есть куча самолетов, которые соединяются, чтобы сформировать местность. Каждая отдельная плоскость имеет свое собственное тело cannon.js
(я использую three.js
для визуализации визуалов) для столкновения. Из-за ограничений памяти я отменяю рендеринг каждого объекта, когда игрок перемещается далеко от объекта. Я могу легко отменить визуализацию объектов в three.js
, просто сделав их невидимыми, но в cannon.js
нет четкого способа сделать это. По сути, я хочу отключить объект cannon.js
, не удаляя его напрямую.
Я уже просмотрел документы, и практически ничего не говорится о том, как это сделать. Я также не видел вопросов ни в одной форме по этой теме.
Пример кода ниже, чтобы показать вам, как я хочу это реализовать.
//terrain generation
for (z=0; z<6; z++) {
for (x=0; x<6; x++) {
//cannon.js hitbox creation
var groundShape = new CANNON.Box(new CANNON.Vec3(2,0.125,2));
var groundBody = new CANNON.Body({ mass: 0, material: zeromaterial});
groundBody.addShape(groundShape);
groundBody.position.set(x*4,0,z*4);
world.addBody(groundBody);
maparray.push(groundBody);
//three.js plane creation
grassmesh = new THREE.Mesh(grassgeometry, grassmaterial);
grassmesh.castShadow = true;
grassmesh.receiveShadow = true;
grassmesh.position.set(x*4,0,z*4);
scene.add(grassmesh);
maparray.push(grassmesh);
}
}
...
function animate() {
//detect if player is outside of loadDistance of object
for(i=0; i<maparray; i++){
if(Math.abs(maparray[i].position.x - player.position.x) <
loadDistance && Math.abs(maparray[i].position.z -
player.position.z) < loadDistance) {
//code here magically turns off collisions for object.
}
}
}
animate();