Cocos2d x 如何让球员的球拍与球发生碰撞而忽略球员';身体

Cocos2d x 如何让球员的球拍与球发生碰撞而忽略球员';身体,cocos2d-x,box2d,game-physics,chipmunk,Cocos2d X,Box2d,Game Physics,Chipmunk,我有棒球运动员的动画,球员用球棒击球,我有90帧的动画和球的精灵。我在球上添加了圆形物理体。如何制造,什么是一个概念,只与球和球拍碰撞,而不是球员的身体和球之间的碰撞? 球拍和球员一起出现在每张图片上。 我正在使用Cocos2d-x和花栗鼠,但如果这个问题可以解决,我可以很容易地切换到Box2d。您正在寻找的是一种在物理世界中区分碰撞的方法。使用box2D时,可以设置物理实体的用户数据。当发生碰撞时,可以获取正在碰撞的两个实体并获取其上的用户信息集。然后适当地处理你的碰撞 下面创建主体的伪代码:

我有棒球运动员的动画,球员用球棒击球,我有90帧的动画和球的精灵。我在球上添加了圆形物理体。如何制造,什么是一个概念,只与球和球拍碰撞,而不是球员的身体和球之间的碰撞? 球拍和球员一起出现在每张图片上。
我正在使用Cocos2d-x和花栗鼠,但如果这个问题可以解决,我可以很容易地切换到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");
使用上面类似的代码创建你的蝙蝠身体(不会把下面所有的代码都放进去)

在联系人侦听器中进行检查时,可以忽略所有用户数据与BallBody和BatBody不匹配的碰撞。在碰撞处理程序中类似于下面的内容

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

auto objectOneUserData = (objectOne->GetUserData());
auto objectTwoUserData = (objectTwo->GetUserData());
对上面的用户数据进行检查,然后返回函数。这应该能奏效。这就是我用来处理或忽略特定类型碰撞的方法

我希望这有帮助

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

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