0

乒乓克隆

首先,感谢您的宝贵时间。

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

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

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

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

4

1 回答 1

1

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

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

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

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

-

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 扩展进行了一些较小的实验,但实际上这两个引擎应该是相同的。这是andengine中处理传感器的另一个链接:http: //www.matim-dev.com/creating-sensors.html

于 2013-07-22T22:47:36.927 回答