首先,谢谢你的时间。
如何在EdgeShape上使用Box2D传感器来确定与Ball的碰撞情况,然后使用所述条件来增加分数变量?
我正在通过libGDX使用Box2D创建一个Pong克隆!我从iforce2d和Ray Wenderlich找到了很好的例子和教程,但是,它们是用我目前不熟悉的语言和库编写的。试图理解和转换代码对我来说不起作用。如果可以提供代码或传感器使用的Java / libGDX再现的链接,我将非常感激。
我正在接收代码中的联系人,但我还不了解算法的配方会忽略与桨状矩形和竞技场边界的接触,但在与左或右EdgdeShape传感器碰撞时增加分数变量。
我已经在网上搜索了两个星期,试图在发布到SO之前找到一些有用的信息来破解解决方案,但是,我正式对这个问题感到难过。我可以使用一些指导。
答案 0 :(得分:1)
我不知道你的努力到底有多远,从未使用过libgdx,但是要走的路是这样的:
fixture.setUserData()
(可能是body
)识别您拥有的单个身体(outLeft,outRight,paddleLeft,paddleRight,ball) - 这可能是从整数到整体的任何有用信息游戏对象实例,你需要什么
将左/右边界设置为传感器fixture.setSensor(true)
- afaik必须将其设置为不让边界引发碰撞
实现您的联系人监听器endContact(Contact contact)
(或开始联系,如您所愿)调用并使用contact.getFixtureA/B()
从联系对象请求灯具A和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扩展的一些较小的实验,但事实上它对于两个引擎应该是相同的。这是另一个处理传感器的链接:http://www.matim-dev.com/creating-sensors.html