Farseer创建矩形宽度高度

时间:2012-11-12 13:35:43

标签: xna height width box2d farseer

基于Box2D的Farseer XNA4.0 C#物理引擎

如果我使用BodyFactory.CreateRectangle(world,w,h,density,new Vector2(x,y));创建正文的方法

我如何才能从身体上获得宽度和高度?

目前我正在保存宽度和高度,但我想知道它是否可以从夹具或形状或其他东西中检索。做了一些尝试但无济于事。它会为我创建的每个实体节省两个浮点数。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我在前面说过我从未使用过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并解析其夹具列表并确定哪一个是您的矩形。

在一天结束时,如果您需要直接获得高度和宽度,我建议您只创建一个自定义类并将正文与浮点值一起存储,并使用getter / setter。它可能比循环遍历对象上的每个夹具并尝试确定哪个是矩形然后将其计算出来而成本更低。