【问题标题】:LibGdx Box2d Platformer Jump implementationLibGdx Box2d Platformer Jump 实现
【发布时间】:2014-01-29 01:08:25
【问题描述】:

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

(P)-->

|瓷砖| |瓷砖| |瓷砖|

当我通过相邻的瓷砖并将 MOB_AIR 值设置为 true 时,在调用 contact begin 后,contact listener 会调用 contact end,导致即使我在地上也无法跳跃。

代码的其他部分(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);
                }
            }
        }`

【问题讨论】:

    标签: java libgdx box2d


    【解决方案1】:

    不要简单地设置开始/结束接触时的状态,而是尝试增加和减少一个计数器来跟踪传感器接触了多少东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-22
      • 1970-01-01
      • 2014-07-02
      • 2013-07-07
      • 1970-01-01
      • 2014-03-03
      • 1970-01-01
      相关资源
      最近更新 更多