【问题标题】:Box2D - how to prevent continuous jumping while next to a wallBox2D - 如何防止靠近墙壁时连续跳跃
【发布时间】:2011-12-11 20:09:31
【问题描述】:

问候 stackoverflow 社区!

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

我已尝试添加额外的 x-checks 以确保我与直接在我下方的东西发生碰撞,但无济于事。

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 检查的效率有任何指示?

提前致谢! :)

【问题讨论】:

    标签: java android game-physics libgdx


    【解决方案1】:

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

    来源:

  • Box2d Manual
  • LibGDX Docs
  • 【讨论】:

    • 谢谢! :D 似乎这个简单的代码就可以解决问题:if(c.getWorldManifold().getNormal().y &gt; 0) return true; 啊,基于脚传感器的方法是我以前的方法(另一种实现,因为这个方法不起作用)也很好用!我将测试这两个系统,如果它们之间有任何显着差异,我会在这里发布。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多