9

2 つのボディ (両方とも 1 つのフィクスチャ) が衝突 (オーバーラップ) しているかどうかを確認するにはどうすればよいですか?

衝突を開始したときと停止したときにメソッドを起動する ContactListener について知っています。しかし、特定の瞬間にそれを確認する方法はありますか? お気に入り:

if(body1.overlaps(body2))...

追加の詳細、そのうちの1つはセンサーです。これは libgdx にあります。

4

3 に答える 3

5

setContactlistner次のようにワールドオブジェクトに適用できます

world.setContactListener(new ContactListener() {

            @Override
        public void beginContact(Contact contact) {

         if(contact.getfixtureA.getBody().getUserData()=="body1"&&
               contact.getfixtureB.getBody().getUserData()=="body2")
            Colliding = true;
            System.out.println("Contact detected");
        }

        @Override
        public void endContact(Contact contact) {
            Colliding = false;
            System.out.println("Contact removed");
        }

        @Override
        public void postSolve(Contact arg0, ContactImpulse arg1) {
            // TODO Auto-generated method stub
        }

        @Override
        public void preSolve(Contact arg0, Manifold arg1) {
            // TODO Auto-generated method stub
        }
    });

このbeginContact()メソッドは、ボディが別のボディに重なったり接触したりするたびに常に呼び出され ます。オブジェクトで何かをしたい場合のように、ボディに関する情報をcontactオブジェクトごとに取得することもできます。contact.getFixtureA().getBody().getUserData();EndContact()

お役に立てれば。

于 2013-06-27T16:54:11.453 に答える
2

探している連絡先が連絡先リストにあるかどうかを確認してください。

for (ContactEdge ce = body1.getContactList(); ce != null; ce = ce.next)
{
     if (ce.other == body2 && ce.contact.isTouching())
     {
         // Do what you want here

         break;
     }
}
于 2013-06-26T09:58:44.770 に答える