1

我正在做一个java项目;“汽车游戏”,我想检测汽车和任何物体(“节点”)之间的碰撞;比如路上的圆锥。

类似于本教程;http://jmonkeyengine.org/wiki/doku.php/jme3:beginner:hello_picking

本教程展示了如何找到射线与附加了框的节点之间的交点。我想用汽车底盘替换射线以进行交叉路口检测。

4

1 回答 1

1

假设您有两个可碰撞对象 a 和 b,并且想要检测它们之间的碰撞。碰撞方可以是几何体、附加几何体的节点(包括根节点)、平面、四边形、线或射线。一个重要的限制是您只能碰撞几何体与边界体或射线。(例如,这意味着 a 必须是 Node 或 Geometry 类型,b 必须分别是 BoundingBox、BoundingSphere 或 Ray 类型。)

接口 com.jme3.collision.Collidable 声明了一种方法,该方法返回在两个 Collidables 之间发现了多少碰撞:collideWith(Collidable other, CollisionResults results)。

代码示例:

// Calculate detection results
  CollisionResults results = new CollisionResults();
  a.collideWith(b, results);
  System.out.println("Number of Collisions between" + 
      a.getName()+ " and " + b.getName() + ": " + results.size());
  // Use the results
  if (results.size() > 0) {
    // how to react when a collision was detected
    CollisionResult closest  = results.getClosestCollision();
    System.out.println("What was hit? " + closest.getGeometry().getName() );
    System.out.println("Where was it hit? " + closest.getContactPoint() );
    System.out.println("Distance? " + closest.getDistance() );
  } else {
    // how to react when no collision occured
  }
}

我认为您还需要阅读本教程

http://hub.jmonkeyengine.org/wiki/doku.php/jme3:advanced:collision_and_intersection

希望这可以帮助。

于 2013-11-27T09:50:17.883 回答