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

问题描述:

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

首先,谢谢你的时间。

如何在EdgeShape上使用Box2D传感器来确定Ball的碰撞条件,然后使用该条件来增加得分变量?

我使用Box2D通过libGDX创建Pong克隆!我已经从iforce2d和Ray Wenderlich中找到了很好的例子和教程,但是,它们是用我目前不熟悉的语言和库编写的。尝试理解和转换代码不适合我。如果可以提供代码或指向传感器使用的Java/libGDX格式的链接,我将非常感激。

我在我的代码中接收联系人,但我还没有理解算法的配方,它会忽略与桨矩形和舞台边界的接触,但在与左或右EdgdeShape传感器发生碰撞时增加分数变量。

我已经清理了两周的网络,试图找到一些有用的信息,以便在发布到SO之前一起解决问题,但是,我正式在这个问题上难住了。我可以使用一些指导。

我不知道你有多远带着你的努力,且从未libgdx工作,但要走的路是这样的:

  1. fixture.setUserData()(可能是body)来识别单个机构你有(outLeft,顾左右而言他,paddleLeft,paddleRight,球) - 这可能是从整数到整场比赛的对象实例的任何有用的信息,你需要什么都

  2. 设置你的左/右边界的传感器fixture.setSensor(true) - 据我所知这必须设定为不让边界导致碰撞

  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。如你所说,我不是100%肯定这会起作用,从来没有在libgdx中使用它,只是使用andengines box2d扩展的一些较小的实验,但实际上它们应该是相同的引擎。这里是另一个链接处理andengine中的传感器:http://www.matim-dev.com/creating-sensors.html

+0

感谢您的时间。您的帮助揭示了更小的答案,这些答案将我设置为我在此处发布的整体解决方案的路径http://stackoverflow.com/questions/17901760/how-to-handle-null-pointer-exception-in-libgdxs-box2d- contactlistener/17902235#17902235。 – HACKQ3R