0

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

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

我怎样才能从身体中恢复宽度和高度?

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

谢谢你的帮助。

4

1 回答 1

2

我先说我从未使用过 Farseer,但看看类定义,似乎没有一种简单的方法可以得到你想要的东西。如果您查看 BodyFactory.CreateRectangle 方法,它不会直接存储 Height 或 Width 值:

    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。与遍历对象上的每个固定装置并尝试确定哪个是您的矩形然后计算出来相比,这可能是一个更便宜的操作。

于 2012-11-12T19:20:03.913 回答