2013-05-04 2 views
1

자바 프로젝트에서 작업하고 있습니다. "자동차 게임"과 나는 차와 어떤 물건 ("노드") 사이의 충돌을 감지하고 싶다; 도로상의 콘과 같은jMonkey에서 2 노드 사이의 교차점을 감지하는 방법

이 자습서와 비슷합니다. http://jmonkeyengine.org/wiki/doku.php/jme3:beginner:hello_picking

자습서에서는 광선과 상자가 연결된 노드 사이의 교차점을 찾는 방법을 보여줍니다. 교차 탐지를 위해 레이를 자동차 섀시로 교체하고 싶습니다.

답변

1

두 개의 충돌 ID a와 b가 있고 이들 사이의 충돌을 감지하려고한다고 가정합니다. 충돌 파티는 Geometries, Geometries가 첨부 된 노드 (rootNode 포함), Planes, Quads, Lines 또는 Rays가 될 수 있습니다. 중요한 제한 사항은 형상과 경계 볼륨 또는 광선 만 충돌 할 수 있다는 것입니다. 예를 들어, a 유형 노드 또는 기하학 및 B 유형 BoundingBox, BoundingSphere 또는 Ray 유형이 있어야 함을 의미합니다.

인터페이스 com.jme3.collision.Collidable은 두 개의 충돌이 발생한 횟수를 반환하는 하나의 메소드를 선언합니다 두 개의 Collidables : collideWith (Collidable other, CollisionResults 결과).

코드 샘플 :

// 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

희망을 읽어도 필요가 있다고 생각합니다.

+1

그들이 getWorldBound를 사용하면 공간의 적절한 경계 상자를 사용할 수 있다는 것을 알려주지 않습니다. 이 튜토리얼에서는 setBound에 관한 것이 있습니다 만, 변환이 새로운 바운드에 적용되지 않기 때문에 동작하지 않습니다. 따라서 0,0,0의 배율은 회전하지 않습니다. 새로운 것을 설정하고 업데이트하는 getWorldBound 인스턴스를 사용하십시오. 그걸 알아 내는데 너무 오래 걸렸습니다. –

+0

@JappieKerk 다른 객체 위에 배치되지 않은 방식으로 물리 객체를 생성하는 방법을 찾으려고합니다. 새로운 하나의 물리학을 가능하게하기 전에 거기에 물체가 있는지 확인하고 싶습니다. getWorldBound()가 그 트릭을 할 수있을 것 같아요? –