需要知道何时开始和结束碰撞box2d

问题描述 投票:0回答:1
public class Contact 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();
        }

当只有一个物体要触摸时,此代码可以很好地工作,但是有时我需要像拖曳另一个物体一样。

[就像玩家在彼此旁边的两个物体上行走时(没有跳跃),第二种方法(endcontact)被调用,但是第一种方法(begincontact)不再被调用。

java android collections libgdx box2d
1个回答
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();

}

此外,如果开始联系,您不会保存是/否,但是会保存联系数量:

//new implementation for contact state change
void startContact() { m_numContacts++; }
void endContact() { m_numContacts--; }
© www.soinside.com 2019 - 2024. All rights reserved.