我不知道你的努力走了多远,也从未使用过 libgdx,但要走的路是这样的:
fixture.setUserData()
(可能是body
)识别您拥有的单个物体(outLeft,outRight,paddleLeft,paddleRight,ball) - 这可能是从整数到整个游戏对象实例的任何有用信息,无论您需要什么
将您的左/右边界设置为传感器fixture.setSensor(true)
- afaik 这必须设置为不让边界引起碰撞
实现您的联系侦听器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