b2PolygonShape :: TestPoint(p1,p2)中的变换参数是什么?

时间:2012-07-22 00:13:12

标签: objective-c c cocos2d-iphone box2d

我对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的第一个参数是什么。为什么需要这个,我应该将它设置为什么?有遗忘的东西吗?我试图这样做而不做任何复杂的事情,比如拥有一个世界对象等等。什么是最简单的方法?

1 个答案:

答案 0 :(得分:1)

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

变换允许您在局部坐标中指定多边形,然后将其转换(平移和旋转)到所需的位置/方向。如果您想要多边形顶点是世界空间坐标,请使用标识(如乘以1)变换:

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

你需要明确地将它设置为identity,因为b2Transform和它的两个成员b2Vec和b2Rot中的默认构造函数都没有做任何事情,因此在发布版本中会包含随机垃圾(调试通常会设置所有未编译的内容)值为0)。

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