Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Cannon.js中禁用车身碰撞_Javascript_Three.js_Cannon.js - Fatal编程技术网

Javascript 在Cannon.js中禁用车身碰撞

Javascript 在Cannon.js中禁用车身碰撞,javascript,three.js,cannon.js,Javascript,Three.js,Cannon.js,我有一堆飞机,它们组合在一起形成地形。每架飞机都有自己的cannon.js机身(我使用three.js渲染视觉效果)用于碰撞。由于内存限制,当玩家移动到远离对象的地方时,我会取消渲染每个对象。我可以在three.js中轻松地反渲染对象,只需将它们变为不可见,但在cannon.js中没有明确的方法可以做到这一点。基本上我想禁用一个cannon.js对象,而不完全删除它 我已经看过了文档,基本上没有关于如何做的内容。我也没有看到关于这个话题的任何形式的问题 下面的示例代码向您展示了我希望如何实现这一

我有一堆飞机,它们组合在一起形成地形。每架飞机都有自己的
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();
//地形生成

对于(z=0;z要从模拟中排除炮体,请运行以下命令:

world.removeBody(groundBody);
要重新添加,请运行:

world.addBody(groundBody);

可以这样删除并重新添加它。这样可以帮助您在运行word.step()时获得更好的性能。

要从模拟中排除CANNON.Body,请运行以下命令:

world.removeBody(groundBody);
要重新添加,请运行:

world.addBody(groundBody);

像这样删除并重新添加它是非常好的。它将帮助您在运行word.step()时获得更好的性能.

请显示您迄今为止尝试的内容以及代码中遇到的问题。编辑以包括代码的实现。请显示您迄今为止尝试的内容以及代码中遇到的问题。编辑以包括代码的实现。