LibGdx Box2d Platformer跳转实现

时间:2014-01-29 01:08:26

标签: java libgdx box2d

我在LibGdx中使用Box2D来创建一个平台游戏。我有一个算法将瓷砖转换为灯具。我正在使用Contact Listener来判断玩家是否在空中,但问题是,因为我我正在使用彼此相邻的灯具,

(P)-->

|瓦片| |瓷砖| |瓦片|

当我通过相邻的磁贴并将MOB_AIR值设置为true时,

联系侦听器呼叫联系人在呼叫联系人开始之后联系结束,因此即使我在地面也无法跳转。

代码的其他部分(mob和box2d世界)工作正常,因为我可以在我新登陆时或在瓷砖之间跳转。

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

http://i.imgur.com/v8ny3sO.png

http://i.imgur.com/yWcDsZb.png

抱歉我的英语不好,任何帮助都将不胜感激。

PS:问题还不在于由于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);
                }
            }
        }`

1 个答案:

答案 0 :(得分:1)

当您获得开始/结束联系时,不要简单地设置状态,而是尝试递增和递减计数器以跟踪传感器接触的数量。