0

私はbox2dを初めて使用するので、ポイントがcocos2dのポリゴン内にあるかどうかを簡単に確認したいと思います。

b2PolygonShape polygon;
b2Vec2 vertices[] =
{ 
    b2Vec2(300, 400),
    b2Vec2(350, 400),
    b2Vec2(300, 500),
    b2Vec2(350, 500)
};

polygon.Set(vertices, 4);
if(polygon.TestPoint(b2Transform(), b2Vec2(301, 405)))
{
    CCLOG(@"Point is inside");
}

b2transformを期待する最初のパラメーターが何であるかわかりません。なぜこれが必要なのですか、何に設定する必要がありますか?忘れているものはありますか?ワールドオブジェクトなど、複雑なことは何もせずにこれを実行しようとしています。最も簡単な方法は何ですか?

4

1 に答える 1

1
bool TestPoint(const b2Transform& transform, const b2Vec2& p) const;

変換を使用すると、ローカル座標でポリゴンを指定してから、ポリゴンを目的の位置/方向に変換(平行移動および回転)することができます。ポリゴンの頂点をワールドスペースの座標にしたい場合は、アイデンティティ(1を掛けるなど)変換を使用します。

btTransform identity; identity.SetIdentity();
polygon.TestPoint(identity, ...

b2Transformとその2つのメンバーb2Vecとb2Rotの両方のデフォルトコンストラクターは何もしないため、明示的にIDに設定する必要があります。したがって、リリースビルドにはランダムなジャンクが含まれます(デバッグでは通常、すべての意図されていない値が0に設定されます) )。

詳細については、b2Math.hおよびb2PolygonShape.cppを参照してください。

于 2012-07-22T00:39:19.797 に答える