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

最佳答案

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。

10-04 13:28