如何使用Box2D传感器触点增加整数变量?

时间:2013-07-22 21:18:15

标签: android box2d libgdx

Pong clone

首先,谢谢你的时间。

如何在EdgeShape上使用Box2D传感器来确定与Ball的碰撞情况,然后使用所述条件来增加分数变量?

我正在通过libGDX使用Box2D创建一个Pong克隆!我从iforce2d和Ray Wenderlich找到了很好的例子和教程,但是,它们是用我目前不熟悉的语言和库编写的。试图理解和转换代码对我来说不起作用。如果可以提供代码或传感器使用的Java / libGDX再现的链接,我将非常感激。

我正在接收代码中的联系人,但我还不了解算法的配方会忽略与桨状矩形和竞技场边界的接触,但在与左或右EdgdeShape传感器碰撞时增加分数变量。

我已经在网上搜索了两个星期,试图在发布到SO之前找到一些有用的信息来破解解决方案,但是,我正式对这个问题感到难过。我可以使用一些指导。

1 个答案:

答案 0 :(得分:1)

我不知道你的努力到底有多远,从未使用过libgdx,但是要走的路是这样的:

  1. fixture.setUserData()(可能是body)识别您拥有的单个身体(outLeft,outRight,paddleLeft,paddleRight,ball) - 这可能是从整数到整体的任何有用信息游戏对象实例,你需要什么

  2. 将左/右边界设置为传感器fixture.setSensor(true) - afaik必须将其设置为不让边界引发碰撞

  3. 实现您的联系人监听器endContact(Contact contact)(或开始联系,如您所愿)调用并使用contact.getFixtureA/B()从联系对象请求灯具A和B,并确定给定的碰撞是否是与您的需求相关,例如:

  4. -

    public void endContact(Contact contact) {
      Fixture fixtureA = contact.getFixtureA();
      Fixture fixtureB = contact.getFixtureB();
      Object userDataA = fixtureA.getBody().getUserData();
      Object userDataB = fixtureB.getBody().getUserData();
      // check if one is ball
      if (userDataA instanceof Ball) {
        checkBallCollision(userDataB);
      } else if (userDataB instanceof Ball) {
        checkBallCollision(userDataA);
      }
    }
    
    private void checkBallCollision(Object userData) {
      if (userData instanceof outLeft) {
        //add points to right player
      } else if (userData instanceof outRight) {
        //add points to left player
      }
    }
    

    -4。将您的ContactListener添加到World.setContactListener()

    如上所述,我不是100%确定这会起作用,从未在libgdx中使用它,只是使用andengines box2d扩展的一些较小的实验,但事实上它对于两个引擎应该是相同的。这是另一个处理传感器的链接:http://www.matim-dev.com/creating-sensors.html