2012-11-12 34 views
0

在先知XNA4.0 C#物理引擎基於Box2D的先知創建Rectangel寬度高度

如果我使用BodyFactory.CreateRectangle(世界,W,H,密度,新Vector2(X,Y));方法來創建一個身體

我怎樣才能從身體獲得寬度和高度?

目前我保存的寬度和高度,但即時通訊想知道它是否可以從夾具或形狀或東西檢索。已經做了一些嘗試,但無濟於事。它會爲我節省兩個浮動,每個實體即時創建。

感謝您的任何幫助。

回答

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並解析它的夾具列表並確定哪個是您的矩形。在一天結束時,如果您需要直接獲取您的身高和身高,我會建議您創建一個自定義類並將身體與浮點值一起存儲,並使用getters/setters。與遍歷對象上的每個燈具並嘗試確定哪個是您的矩形然後將其計算回去相比,這可能是一種比較便宜的操作。

相關問題