2015-11-27 34 views
0

我有球員用蝙蝠擊球的棒球運動員動畫,我有90幀在那個動畫和精靈球。我加了圈子物理身體球。如何製造,什麼是概念,只與球和蝙蝠碰撞,而不是球員的身體和球之間的碰撞? 蝙蝠與玩家一起在每張圖片上。 我正在使用Cocos2d-x和Chipmunk,但如果可以解決此問題,我可以輕鬆切換到Box2d。如何獲得球員和球之間的碰撞並忽略球員的身體

回答

0

您正在尋找的是一種區分物理世界中碰撞的方法。使用box2D時,您可以設置物理主體的用戶數據。當碰撞發生時,你可以得到兩個正在碰撞的物體並獲取設置在其上的用戶信息。然後適當地處理你的碰撞。

下面的僞代碼來創建一個身體

b2BodyDef ballBodyDef; 
ballBodyDef.type = b2_dynamicBody; 
ballBodyDef.position.Set(tileNode->getPositionX()/Pixel_To_Meter_Ratio, 
        tileNode->getPositionY()/ Pixel_To_Meter_Ratio); 

auto b2CircleShape ballShape; 
ballShape->m_radius = ballSize/PTM_RATIO; // Pixel to meter ration is 32.0 in my project 

auto ballBody= physicsWorld->CreateBody(ballBodyDef); 
// This will be used later on when you want to have different reactions for different collisions.  
ballBody->SetUserData("BallBody"); 

使用類似上面的代碼創建蝙蝠的身體(不會把下面所有的代碼)。

... 
auto batBody = physicsWorld->CreateBody(batBodyDef); 
batBody->setUserData("BatBody"); 

在做您的聯繫監聽你的支票,你可以忽略具有不匹配BallBody和BatBody用戶數據的所有衝突。在你的碰撞處理程序中像下面的東西。

auto objectOne = contact->GetFixtureA()->GetBody(); 
auto objectTwo = contact->GetFixtureB()->GetBody(); 

auto objectOneUserData = (objectOne->GetUserData()); 
auto objectTwoUserData = (objectTwo->GetUserData()); 

對上面的userData進行檢查並返回該函數。這應該做的伎倆。這是我用來處理或忽略特定類型的碰撞。

我希望這會有所幫助。