Java LibGdx-Box2d平台跳转实现

Java LibGdx-Box2d平台跳转实现,java,libgdx,box2d,Java,Libgdx,Box2d,我在LibGdx中使用Box2D创建一个platformer游戏。我有一个算法可以将瓷砖转换为固定装置。我使用Contact Listener来确定玩家是否在空中,但问题是,因为我使用的固定装置彼此相邻 (P)--> |瓷砖| |瓷砖| |瓷砖| 联系人侦听器在调用contact begin后调用contact end,当我通过相邻的互动程序并将MOB_AIR值设置为true时,即使我在地面上也无法跳跃 代码的其他部分(mob和box2d-world)工作正常,因为我可以在新登陆时跳转,

我在LibGdx中使用Box2D创建一个platformer游戏。我有一个算法可以将瓷砖转换为固定装置。我使用Contact Listener来确定玩家是否在空中,但问题是,因为我使用的固定装置彼此相邻

(P)-->
|瓷砖| |瓷砖| |瓷砖|

联系人侦听器在调用contact begin后调用contact end,当我通过相邻的互动程序并将MOB_AIR值设置为true时,即使我在地面上也无法跳跃

代码的其他部分(mob和box2d-world)工作正常,因为我可以在新登陆时跳转,或者在瓦片之间跳转

如果您以前遇到过同样的问题,有没有一种好的方法来实现这种跳跃

对不起,我的英语不好,任何帮助将不胜感激

另外,问题并不是因为box2d多边形碰撞的小故障,我使用链形作为播放器,多边形作为瓷砖。 `


当您获得开始/结束触点时,不要简单地设置状态,而是尝试递增或递减计数器,以跟踪传感器正在接触的物体数量

        public void beginContact(Contact contact) {
            Fixture x1 = contact.getFixtureA();
            Fixture x2 = contact.getFixtureB();

            if(x1.getUserData()!=null && x2.getUserData()!=null){
                if(x1.getUserData().equals("sensor") && x2.getUserData().equals("x")){
                    mob.setState(Mob.ON_AIR, false);
                }

                else if(x2.getUserData().equals("sensor") && x1.getUserData().equals("x")){
                    mob.setState(Mob.ON_AIR, false);
                }
            }

        }

        @Override
        public void endContact(Contact contact) {
            Fixture x1 = contact.getFixtureA();
            Fixture x2 = contact.getFixtureB();

            if(x1.getUserData()!=null && x2.getUserData()!=null){
                if(x1.getUserData().equals("sensor") && x2.getUserData().equals("x")){

                    mob.setState(Mob.ON_AIR, true);

                }
                else if(x2.getUserData().equals("sensor") && x1.getUserData().equals("x")){

                    mob.setState(Mob.ON_AIR, true);
                }
            }
        }`