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 及其两个成员 b2Vec 和 b2Rot 中的默认构造函数不执行任何操作,因此将在发布版本中包含随机垃圾(调试通常将所有非整数值设置为 0 )。

有关详细信息,请参见 b2Math.h 和 b2PolygonShape.cpp。

于 2012-07-22T00:39:19.797 回答