Отключить столкновение тела в Cannon.js - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть куча самолетов, которые соединяются, чтобы сформировать местность. Каждая отдельная плоскость имеет свое собственное тело 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();

1 Ответ

1 голос
/ 10 апреля 2019

Чтобы исключить CANNON.Body из симуляции, выполните следующее:

world.removeBody(groundBody);

Чтобы снова добавить его, выполните:

world.addBody(groundBody);

Удалять и добавлять идеальноэто обратно, как это.Это поможет вам повысить производительность при запуске word.step ().

...