2016-04-22 13 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

接触は次のようにその地域にあった場合は、二人の遺体

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

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

と接触リスナーチェック中で治具にsetUserData(「地域1」)にあります。

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