2014-05-14 4 views
1

저는 box2d에 비교적 익숙합니다. 저는 box2dweb 버전을 사용하고 있습니다. 운동기구가 제 무대의 경계를 벗어 났을 때를 감지 할 수 있기를 원합니다. Box2D.Dynamics.b2BoundaryListener는 명백한 답변이지만 box2dweb 빌드에서는 지원되지 않습니다.box2dweb에 경계 수신기를 구현합니다.

update()를 호출 할 때마다 각 본문의 좌표를 원시적으로 확인하는 대신 리스너를 만드는 효율적인 방법이 있습니까? 정적 인 물체를 센서로 사용해 보았지만 운동 물체를 감지하지 못했습니다.

답변

0

내가 아는 한 b2BoundaryListener는 이전 버전의 Box2D의 일부 였고 Box2D 세계에는 더 이상 경계가 없으므로 제거되었습니다.

동적 센서는 기구학 체를 감지 할 수 있으므로 사용할 수 있습니다. 세계가 중력을 사용한다면 몸을 고쳐야합니다.

중력에 반하는 힘을가하거나 조인트 (예 : 용접 조인트)로 정적 몸체에 고정시킬 수 있습니다.

최근 Box2D의 자바 스크립트 포트는 또한 중력에 의해 영향을받지되는 동적 몸을 만들 수 있도록 할 setGravityScale 방법을 포함한다 (예를 들면 JSBox2D)

하지만 업데이트에서 수동으로이 일을 생각은 아마 더 나은 생각하고해야 b2AABB 클래스를 사용하면 꽤 간단합니다. 경계 상자가 범위를 벗어나면 객체가 제거됩니다.

는 다음 (테스트되지 않은 코드) 뭔가를 할 수 : 또한 b2AABB.Contains를 확인해야 할 수도 있습니다

var body = world.GetBodyList(); 
     while (body != null) { 
      var fixture = body.GetFixtureList(); 
      var bodyIsInBounds = false; 
      while (fixture != null) { 
       // bounds AABB are your boundaries (as b2AABB object) 
       if (fixture.GetAABB().TestOverlap(boundsAABB)) { 
        bodyIsInBounds = true; 
        break; 
       } 
       fixture = fixture.GetNext(); 
      } 
      if (!bodyIsInBounds) { 
       world.DestroyBody(body); 
      } 
      body = body.GetNext(); 
     } 

. boundsAABB에 다른 b2AABB 객체가 완전히 포함되어 있으면 TestOverlap이 true를 반환하는지 여부는 확실하지 않습니다.

관련 문제