box2d在平台的末尾停止精灵

时间:2014-02-09 22:19:23

标签: box2d

抱歉我的英文,

我正在使用BOX2D,我有一个作为Fixture的tile,以及一个DynamicBody的玩家。 当我单击鼠标上的方向时,我调用方法setLinearVelocity,然后播放器开始向左或向右移动,如下所示:

__ _ __ _ __ _ 0 _ __ _ __ _ _

其中0 =玩家,_ =图块。

我想知道如何判断玩家是否在平台的最后,即:

__ _ ___ _0

并阻止它移动或其他任何东西。

我尝试使用Contact Listener的endContact事件,其中我调用了applyImpulse(),它将对象拉开,但它没有那么好用。

我还想到了获得夹具的长度,然后通过计算玩家位置相对于夹具的相对性,我可以得到终点,当它们都碰到时,但我没有找到夹具的“尺寸”。 / p>

有人知道这个问题的解决方案吗?

1 个答案:

答案 0 :(得分:0)

不要使用联系人监听器。只做一些几何计算。首先获得圆形夹具尺寸或多边形夹具顶点,并检测播放器是否位于瓷砖的边缘。要获得上述信息,请执行以下操作:

for (b2Fixture* fixture = body->GetFixtureList(); fixture; fixture = fixture->GetNext())
{
    b2Shape::Type shapeType = fixture->GetType();
    if ( shapeType == b2Shape::e_circle )
    {
        b2CircleShape* circleShape = (b2CircleShape*)fixture->GetShape();
        auto radus = circleShape->m_radius;
    }
    else if ( shapeType == b2Shape::e_polygon )
    {
        b2PolygonShape* polygonShape = (b2PolygonShape*)fixture->GetShape();
        auto verices = polygonShape->m_vertices;
    }
}