0

Box2D に基づく Farseer XNA4.0 C# 物理エンジン

BodyFactory.CreateRectangle(world, w, h,density, new Vector2(x, y)); を使用する場合 ボディの作り方

ボディから幅と高さを取得するにはどうすればよいですか?

現在、幅と高さを保存していますが、フィクスチャや形状などから取得できるかどうか疑問に思っています。いくつかの試みをしましたが、役に立ちませんでした。作成するエンティティごとに 2 つのフロートを節約できます。

助けてくれてありがとう。

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 を取得し、そのフィクスチャ リストを解析して、どれが四角形であるかを判断する必要があります。

結局のところ、Height と Width を直接取得する必要がある場合は、カスタム クラスを作成し、ボディを float 値と一緒に保存し、getter/setter を使用することをお勧めします。オブジェクトのすべてのフィクスチャをループして、どれが四角形であるかを判断してから計算し直すよりも、コストがかからない操作になる可能性があります。

于 2012-11-12T19:20:03.913 に答える