我有一个非常简单的游戏,我正在玩,以触摸/物理示例为基础。基本上发生的事情是,当你触摸屏幕时,它会创建一个带有身体的形状并用box2d反弹。现在,我想要做的是当特定的精灵与任何东西发生冲突时,它会将当前帧更改为“1”,然后再返回原始帧。
我有点工作,但每当任何精灵碰撞任何东西时,它只会更新最近创建的精灵。这是我的碰撞检测:
private ContactListener createContactListener()
{
ContactListener contactListener = new ContactListener()
{
@Override
public void beginContact(Contact contact) {
face.animate(new long[] { 50, 10}, new int[] {1, 0}, 0);;
}
@Override
public void endContact(Contact contact) {
}
@Override
public void preSolve(Contact contact, Manifold oldManifold) {
}
@Override
public void postSolve(Contact contact, ContactImpulse impulse) {
}
};
return contactListener;
}
正如我所说,我认为我很接近,我似乎无法弄明白。谢谢!
答案 0 :(得分:0)
使用联系人侦听器时,不会为两个碰撞体单独调用它。我的意思是当BodyA与BodyB发生碰撞时,只调用一个联系人监听器回调。您只更新联系人侦听器注册到的类的实例。
当您注册侦听器(对于每个侦听器)时,您需要做的是将面所属的类的实例作为userData传递。然后,您可以从Contact by:
中检索实例FaceClass* fcA = contact.GetFixtureA().GetBody().GetUserData();
FaceClass* fcB = contact.GetFixtureB().GetBody().GetUserData();
然后在检索到的实例中调用一个函数来执行您需要的操作,可能是“updateOnCollision”。
fcA.updateOnCollision();
fcB.updateOnCollision();
P.S。我从头开始编写代码,我的Jave很糟糕,所以可能需要进行一些调整。