2012-11-12 14 views
0
Box2D의

시어 Rectangel 너비 높이 만들기

에 기초 시어 XNA4.0 C# 물리 엔진

난 BodyFactory.CreateRectangle을 사용하는 경우 (세계 시간, 농도, 새로운 Vector2 (X, Y), w); 본문을 만드는 방법

본문에서 너비와 높이를 다시 가져올 수 있습니까?

현재 너비와 높이를 저장하고 있지만 고정물이나 모양 등에서 검색 할 수 있는지 궁금합니다. 몇 가지 시도를했지만 아무 소용이 없습니다. 메신저가 생성하는 엔터티마다 두 개의 부동 소수점을 절약 할 수 있습니다.

도움을 주셔서 감사합니다.

답변

3

내가 서술 한 내용은 Farseer를 사용한 적이 없지만 클래스 정의를 보면, 원하는 것을 얻을 수있는 간단한 방법 인 것처럼 보이지 않습니다. 당신이 BodyFactory.CreateRectangle 방법을 보면, 직접적 높이 또는 너비 값을 저장하지 않는 대신

public static Body CreateRectangle(World world, float width, float height, float density, Vector2 position, 
             object userData) 
    { 
     if (width <= 0) 
      throw new ArgumentOutOfRangeException("width", "Width must be more than 0 meters"); 

     if (height <= 0) 
      throw new ArgumentOutOfRangeException("height", "Height must be more than 0 meters"); 

     Body newBody = CreateBody(world, position); 
     Vertices rectangleVertices = PolygonTools.CreateRectangle(width/2, height/2); 
     PolygonShape rectangleShape = new PolygonShape(rectangleVertices, density); 
     newBody.CreateFixture(rectangleShape, userData); 

     return newBody; 
    } 

을,이 경우는 몸의 형태에 할당하는 정점의 세트를 (생성 직사각형) 그러나,이 정점에 도달 할 수있는 방법이 있다는 것은 커서 눈에 보이지 않습니다.

너무 짧아서, 직사각형 높이 또는 너비의 직선 부동 값을 얻을 수있는 직접적인 방법이 없습니다. 어떤 점에서 꼭지점에 도달하여 다시 계산할 수도 있지만,이 경우 Body를 가져 와서 조명기 목록을 파싱하고 어느 사각형이 사각형인지 알아 내야합니다.

하루의 끝에서 너비와 높이를 직접 가져와야하는 경우 사용자 지정 클래스를 만들고 float 값과 함께 몸체를 저장하고 getters/setters를 사용하는 것이 좋습니다. 객체의 모든 조명기를 반복하고 사각형을 결정한 다음 다시 계산하는 것보다 비용이 적게 듭니다.