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();
}
当只有一个物体要触摸时,此代码可以很好地工作,但是有时我需要像拖曳另一个物体一样。
就像当玩家在彼此旁边的两个物体上行走(不跳跃)时,第二种方法(endcontact
)被调用,但第一种方法(begincontact
)不再被调用。
答案 0 :(得分: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--; }