问候stackoverflow社区!

我正在开发一款使用Box2D进行碰撞检测和物理处理的Android游戏。 现在,我正在实现一个基本的Platformer系统。 跳到位,但故障很小。 以下功能旨在确定玩家是否在地面上。 简单吧? 好吧,它工作正常,除非玩家紧挨着墙,在这种情况下,它只会让他不断跳起来,因为即使墙不在玩家正下方,该功能仍会返回true。

我尝试添加其他x-check,以确保我与自己正下方的东西发生碰撞,但无济于事。

private boolean isGrounded(float deltaTime) {               
    List<Contact> contactList = world.getContactList();

    for(int i = 0; i < contactList.size(); i++) {
        Contact contact = contactList.get(i);
        if(contact.isTouching() && (contact.getFixtureA() == sensorFixture ||
           contact.getFixtureB() == sensorFixture)) {               

            Vector2 pos = body.getPosition();
            WorldManifold manifold = contact.getWorldManifold();
            boolean below = true;
            Vector2 cpoint;
            for(int j = 0; j < manifold.getNumberOfContactPoints(); j++) {
                cpoint = manifold.getPoints()[j];
                below &= (
                            (cpoint.y < pos.y - 0.15f) 
                            && (cpoint.x > pos.x - w/2 + 3f)
                            && (cpoint.x < pos.x + w/2 - 3f)
                        );

                if(below) return true;
            }

            return false;
        }
    }
    return false;
}

因此,是否有人对我可以做些什么以使isGrounded检查更有效的指示?

提前致谢! :)

===============>>#1 票数:1 已采纳

我对Box2d不熟悉,但是我的第一个想法是检查与您接触的对象的方向。 快速查看文档会发现WorldManifold具有getNormal,该getNormal提供了从夹具A指向夹具B的局部法线。 在此处,您可以使用点积将方向与X轴或Y轴进行比较。 然后,您可以确定要让玩家能够跳跃的表面有多陡峭。 您可能需要将局部法线转换为世界空间。

资料来源:

  • Box2d手册
  • LibGDX文件
  •   ask by Andrei Bârsan translate from so

    未解决问题?本站智能推荐: