2013-07-22 28 views
0

Pong clone如何使用Box2D傳感器觸點增加整數變量?

首先,謝謝你的時間。

如何在EdgeShape上使用Box2D傳感器來確定Ball的碰撞條件,然後使用該條件來增加得分變量?

我使用Box2D通過libGDX創建Pong克隆!我已經從iforce2d和Ray Wenderlich中找到了很好的例子和教程,但是,它們是用我目前不熟悉的語言和庫編寫的。嘗試理解和轉換代碼不適合我。如果可以提供代碼或指向傳感器使用的Java/libGDX格式的鏈接,我將非常感激。

我在我的代碼中接收聯繫人,但我還沒有理解算法的配方,它會忽略與槳矩形和舞臺邊界的接觸,但在與左或右EdgdeShape傳感器發生碰撞時增加分數變量。

我已經清理了兩週的網絡,試圖找到一些有用的信息,以便在發佈到SO之前一起解決問題,但是,我正式在這個問題上難住了。我可以使用一些指導。

回答

1

我不知道你有多遠帶着你的努力,且從未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