需要知道什么时候碰撞开始和结束的Box2D(need to know when collision

2019-10-28 21:08发布

 public class Conntact implements ContactListener {


    @Override
    public void beginContact(Contact contact) {
        Fixture fa = contact.getFixtureA();
        Fixture fb = contact.getFixtureB();
        if (fa.getFilterData().categoryBits==16){

            ((Gamescreen)fa.getUserData()).starttouch(fa,fb);
        }
 @Override
    public void endContact(Contact contact) {
        Fixture fa = contact.getFixtureA();
        Fixture fb = contact.getFixtureB();
        if (fa.getFilterData().categoryBits==16)
        {
            ((Gamescreen)fa.getUserData()).endtouch();
        }

当只有一个物体碰触但过一段时间我需要像拖对象中的每个人的身边这个代码工作正常。 就像当玩家在2个对象(不跳)每个人的身边走第二种方法( endcontact叫),但第一种方法( begincontact )不会再次调用。

Answer 1:

如果我理解正确的话,那么这个链接可能是你在找什么: http://www.iforce2d.net/b2dtut/collision-callbacks

这是C ++,但你可以看到碰撞回调的示例实现了对对象:

void BeginContact(b2Contact* contact) {

  //check if fixture A was a ball
  void* bodyUserData = contact->GetFixtureA()->GetBody()->GetUserData();
  if ( bodyUserData )
    static_cast<Ball*>( bodyUserData )->startContact();

  //check if fixture B was a ball
  bodyUserData = contact->GetFixtureB()->GetBody()->GetUserData();
  if ( bodyUserData )
    static_cast<Ball*>( bodyUserData )->startContact();

}

此外,你不救的true / false如果接触开始,但接触次数:

//new implementation for contact state change
void startContact() { m_numContacts++; }
void endContact() { m_numContacts--; }


文章来源: need to know when collision is begin and end box2d