Как проверить, сталкиваются ли два тела Box2d / перекрываются в любой момент?
Как вы можете проверить, сталкиваются ли 2 тела(с 1 креплением) (перекрытия)?
Я знаю о ContactListener, который запускает метод, когда они начинают сталкиваться и когда они останавливаются. Но есть ли способ проверить это в любой данный момент? Например:
if(body1.overlaps(body2))...
дополнительные детали, один из них датчик. это в libgdx.
3 ответов
вы можете подать заявку 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()
метод будет вызван.
надеюсь, это поможет.
просто проверьте, если контакт, который вы ищете, находится в списке контактов:
for (ContactEdge ce = body1.getContactList(); ce != null; ce = ce.next)
{
if (ce.other == body2 && ce.contact.isTouching())
{
// Do what you want here
break;
}
}
вы можете создать переменную collision: Когда равно 0, столкновение равно false; Когда равно 1, столкновение равно true;
Так:
if(body1.overlaps(body2)==true)
{collision=1}
else
{collision=0}