【问题标题】:How to detect the intersections between 2 nodes in jMonkey如何检测jMonkey中2个节点之间的交点
【发布时间】:2013-05-04 17:18:53
【问题描述】:

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

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

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

【问题讨论】:

    标签: jmonkeyengine


    【解决方案1】:

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

    接口 com.jme3.collision.Collidable 声明了一个方法,该方法返回在两个 Collidable 之间发现了多少碰撞: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

    希望这会有所帮助。

    【讨论】:

    • 他们没有告诉您的是,您可以使用 getWorldBound 获取空间的正确边界框。本教程介绍了关于 setBound 的内容,但这不起作用,因为变换未应用于该新边界,因此它将在 0,0,0 处缩放一且没有旋转。使用 getWorldBound 代替设置一个新的并更新它。我花了很长时间才弄清楚
    • @JappieKerk 我正在尝试找到一种方法来生成物理对象,使其不放置在其他对象之上;我想在启用新的物理之前检查那里是否有物体;我猜 getWorldBound() 可以解决问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    相关资源
    最近更新 更多