如何使用Box2D传感器触点增加整数变量?
首先,谢谢你的时间。
如何在EdgeShape上使用Box2D传感器来确定Ball的碰撞条件,然后使用该条件来增加得分变量?
我使用Box2D通过libGDX创建Pong克隆!我已经从iforce2d和Ray Wenderlich中找到了很好的例子和教程,但是,它们是用我目前不熟悉的语言和库编写的。尝试理解和转换代码不适合我。如果可以提供代码或指向传感器使用的Java/libGDX格式的链接,我将非常感激。
我在我的代码中接收联系人,但我还没有理解算法的配方,它会忽略与桨矩形和舞台边界的接触,但在与左或右EdgdeShape传感器发生碰撞时增加分数变量。
我已经清理了两周的网络,试图找到一些有用的信息,以便在发布到SO之前一起解决问题,但是,我正式在这个问题上难住了。我可以使用一些指导。
我不知道你有多远带着你的努力,且从未libgdx工作,但要走的路是这样的:
fixture.setUserData()
(可能是body
)来识别单个机构你有(outLeft,顾左右而言他,paddleLeft,paddleRight,球) - 这可能是从整数到整场比赛的对象实例的任何有用的信息,你需要什么都设置你的左/右边界的传感器
fixture.setSensor(true)
- 据我所知这必须设定为不让边界导致碰撞实现您的联系听众
endContact(Contact contact)
(或开始接触,像你想的话)电话,并要求从接触对象的固定装置A和Bcontact.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。如你所说,我不是100%肯定这会起作用,从来没有在libgdx中使用它,只是使用andengines box2d扩展的一些较小的实验,但实际上它们应该是相同的引擎。这里是另一个链接处理andengine中的传感器:http://www.matim-dev.com/creating-sensors.html
感谢您的时间。您的帮助揭示了更小的答案,这些答案将我设置为我在此处发布的整体解决方案的路径http://stackoverflow.com/questions/17901760/how-to-handle-null-pointer-exception-in-libgdxs-box2d- contactlistener/17902235#17902235。 – HACKQ3R