2016-04-22 15 views
1

我使用LibGDX,我有一個移動的固體物體(Fixture B)和一個傳感器物體(Fixture A)。如何獲得傳感器夾具的接觸位置

在我的ContactListener中,我可以檢查一個固體物體和傳感器是否發生碰撞,但是我不知道第一個接觸點在哪裏(我需要知道該點,因爲它將它用作下一個階段的中心點) 。

我有這樣的代碼:

@Override 
public void beginContact(Contact contact) 
{ 
    Fixture fa = contact.getFixtureA(); 
    Fixture fb = contact.getFixtureB(); 
    LogMessage("World points: "+contact.getWorldManifold().getPoints().length); 
    float contactX = contact.getWorldManifold().getPoints()[0].x; //always 0.0 
    float contactY = contact.getWorldManifold().getPoints()[0].y; //always 0.0 
    LogMessage("Contact X: "+contactX); 
    LogMessage("Contact Y: "+contactY); 
} 

不幸的是,這種歧管不包含任何碰撞點,因爲固定裝置中的一個是傳感器。我很確定他們不會錯過傳感器接觸點檢測這樣的重要任務的執行,我還找不到合適的方法。

是否有任何內置的方法來檢測接觸點?

回答

0

你必須setUserData來(「REGION1」)在這兩個機構

//Class platform 
b2body.createFixture(fdef).setUserData("region1"); 

//Class Player 
b2body.createFixture(fdef).setUserData("foot"); 

,並在聯繫監聽檢具,如果接觸是在該地區是這樣的:

public void beginContact(Contact contact) { 
    Fixture fixA = contact.getFixtureA(); 
    Fixture fixB = contact.getFixtureB(); 

    if(fixA.getUserData() == "region1" || fixB.getUserData() == "region1"){ 
     Fixture foot = fixA.getUserData() == "foot" ? fixA : fixB; 
     Fixture object = foot == fixA ? fixB : fixA; 
     // 
     Gdx.app.log("foot touched","region1"); 
    } 

更新11/05/16

瞭解。你正在做正確

我做了一個簡單的例子來檢查:

the collision points and mouse detect

,但嘗試檢查,如果你的燈具有密度。例如,如果您創建EdgeShape,則不會被檢測到

+0

您誤解了我的問題:我需要知道_exact碰撞點_不是確定對象和傳感器是否發生碰撞。我已經有了。 – Nestor