我正在创造一种无尽的跑步者类型的游戏,其中玩家基于一个isgrounded变量跳跃,当玩家开始与地面物体(本身是静止物体)发生碰撞时,该变量被设置为真 . 播放器(动态体)包括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();
    }
}

当底部与地面或障碍物之类的东西发生碰撞时应该打电话接地 . 这种情况正在发生但是有时碰撞没有记录,所以玩家不会跳跃并且卡住可以解决这个问题的方法?