C++ box2d碰撞未每次注册

C++ box2d碰撞未每次注册,c++,box2d,game-physics,C++,Box2d,Game Physics,我正在制作一个无止境的跑步者类型的游戏,在这个游戏中,玩家根据isground变量跳跃,当玩家开始与地面物体碰撞时,这个变量被设置为true,而地面物体本身就是一个静止的物体。playerdynamic主体由2个固定装置组成,一个主固定装置和一个底部传感器,用于接地检测。。底部夹具的用户数据为4 我的碰撞监听器有点像这样 class coldetect : public b2ContactListener { virtual void BeginContact(b2Contact* contac

我正在制作一个无止境的跑步者类型的游戏,在这个游戏中,玩家根据isground变量跳跃,当玩家开始与地面物体碰撞时,这个变量被设置为true,而地面物体本身就是一个静止的物体。playerdynamic主体由2个固定装置组成,一个主固定装置和一个底部传感器,用于接地检测。。底部夹具的用户数据为4 我的碰撞监听器有点像这样

class coldetect : public b2ContactListener
{
virtual void BeginContact(b2Contact* contact)
{
    groundplayer(contact);
}
void groundplayer(b2Contact* contact);
};

void coldetect::groundplayer(b2Contact* contact)
{
if((int)contact->GetFixtureA()->GetUserData() == 4)
    {
        std::cout<<"grounded\n";
        static_cast<player*>(contact->GetFixtureA()->GetBody()->GetUserData())->isGrounded();
    }
    else if((int)contact->GetFixtureB()->GetUserData() == 4)
    {
        std::cout<<"grounded\n";
        static_cast<player*>(contact->GetFixtureB()->GetBody()->GetUserData())->isGrounded();
    }
}
当底部部件与地面或障碍物等物体碰撞时,哪一个应呼叫接地。。这种情况正在发生,但有时碰撞未被记录,因此玩家不会跳跃并被卡住
解决方法是什么?

只有当底部传感器是世界上唯一一个用户数据设置为4的传感器时,这才有效。假设是这样的话,我觉得还可以。如果不是这样,当底部传感器接触到设置为4的其他对象时,可以在其他对象上调用IsGround。是的,只有底部传感器的用户数据设置为4。。此外,只有当玩家从障碍物(如板条箱)上跳下时,问题才会出现,否则就不会出现。。就像它会从板条箱上跳下来,然后当它下一次从地面上跳下来时,这似乎发生了世界上只有一个装置的用户数据设置为4,但是当它接触到一些东西时,你看不到打印到标准输出的接地显示?似乎不可能。在模拟过程中是否更改任何碰撞过滤器设置?请记住,这些联系人回调将在world Step函数中调用,因此如果要获取回调,则需要调用该函数。不,我没有使用任何冲突筛选器。。如果您是指调用world.step,则调用step函数。。当然,我在我的主循环中称之为。。只有当玩家从板条箱上跳下后,问题才会出现。。。否则就没问题了。。