2013-07-29 97 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很糟糕,所以可能需要一些調整。