簡體   English   中英

如何檢查兩個Box2d機構是否在任何時刻發生碰撞/重疊?

[英]How to check if two Box2d bodies collision / overlap at any moment?

如何檢查2個物體(兩個夾具)是否碰撞(重疊)?

我知道ContactListener在它們開始碰撞時和停止時觸發方法。 但有沒有辦法在任何特定時刻檢查它? 喜歡:

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

其他細節,其中之一是傳感器。 這是在libgdx中。

您可以將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.getFixtureA().getBody().getUserData();contact對象獲取有關主體的信息contact.getFixtureA().getBody().getUserData(); 如果你想用它們做某事。當它們彼此分開時,將調用EndContact()方法。

希望這可以幫助。

只需檢查您要查找的聯系人是否在聯系人列表中:

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

         break;
     }
}

您可以創建變量碰撞:當等於0時,collision等於false; 當等於1時,碰撞等於真;

所以:

if(body1.overlaps(body2)==true)
{collision=1}
else
{collision=0}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM