0
我有球員用蝙蝠擊球的棒球運動員動畫,我有90幀在那個動畫和精靈球。我加了圈子物理身體球。如何製造,什麼是概念,只與球和蝙蝠碰撞,而不是球員的身體和球之間的碰撞? 蝙蝠與玩家一起在每張圖片上。 我正在使用Cocos2d-x和Chipmunk,但如果可以解決此問題,我可以輕鬆切換到Box2d。如何獲得球員和球之間的碰撞並忽略球員的身體
我有球員用蝙蝠擊球的棒球運動員動畫,我有90幀在那個動畫和精靈球。我加了圈子物理身體球。如何製造,什麼是概念,只與球和蝙蝠碰撞,而不是球員的身體和球之間的碰撞? 蝙蝠與玩家一起在每張圖片上。 我正在使用Cocos2d-x和Chipmunk,但如果可以解決此問題,我可以輕鬆切換到Box2d。如何獲得球員和球之間的碰撞並忽略球員的身體
您正在尋找的是一種區分物理世界中碰撞的方法。使用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進行檢查並返回該函數。這應該做的伎倆。這是我用來處理或忽略特定類型的碰撞。
我希望這會有所幫助。