-1

我有一个非常简单的游戏,我正在玩,建立在触摸/物理示例之上。基本上发生的情况是,当您触摸屏幕时,它会创建一个带有 body 的形状并使用 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;
    }

正如我所说,我想我很接近我似乎无法弄清楚。谢谢!

4

1 回答 1

0

使用接触侦听器,不会为两个碰撞体单独调用它。我的意思是当 BodyA 与 BodyB 发生碰撞时,只会调用一个联系人侦听器回调。您只需更新联系人侦听器注册到的类的实例。

您需要做的是在注册侦听器时将人脸所属的类的实例作为 userData 传递(对于每个)。然后您可以通过以下方式从联系人中检索实例:

FaceClass* fcA = contact.GetFixtureA().GetBody().GetUserData();
FaceClass* fcB = contact.GetFixtureB().GetBody().GetUserData();

然后在检索到的实例中调用一个函数,该函数将执行您需要的操作,可能类似于“updateOnCollision”。

fcA.updateOnCollision();
fcB.updateOnCollision();

PS 我从头写代码,我的 Jave 很糟糕,所以可能需要一些调整。

于 2013-07-29T09:18:40.550 回答