2013-07-29 92 views
-1

我有一个非常简单的游戏,我正在玩,建立了触摸/物理的例子。基本上发生的是,当你触摸屏幕时,它会创建一个带有body2的形状,并与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

我不认为你已经在这里显示足够的信息。什么是脸?它是如何存储的?你可能在课堂上有一些你不期待的静态内容。 – HalR

+0

脸部是身体附着的精灵。当场景创建时,它会创建物理世界,重力跟随加速度计。当你触摸屏幕上的任何地方时,它会创建“脸部”和它的身体,并且它们会弹跳。所以,当你触摸场景5次时,你会制作5张脸。我希望每个人在与任何东西碰撞时,在短时间内切换到另一个画面,然后回到原始画面。 – Cyanocobalamin

回答

0

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

当您注册侦听器(每个侦听器)时,您需要做的是将类所属的类的实例作为userData传递。然后你可以从联系人检索实例:

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

然后检索到的实例,将你需要什么,也许像“updateOnCollision”中调用的函数。

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

P.S.我从头部编写代码,我的Jave很糟糕,所以可能需要一些调整。