【发布时间】:2015-11-27 20:47:01
【问题描述】:
我有棒球运动员用球棒击球的动画,我在那个动画和球的精灵上有 90 帧。我在球上添加了圆形物理体。如何制作,什么是概念,只与球和球棒发生碰撞,而不是在球员的身体和球之间发生碰撞? 蝙蝠与玩家一起出现在每个图像上。 我正在使用 Cocos2d-x 和 Chipmunk,但如果这个问题可以解决,我可以轻松切换到 Box2d。
【问题讨论】:
标签: cocos2d-x box2d game-physics chipmunk
我有棒球运动员用球棒击球的动画,我在那个动画和球的精灵上有 90 帧。我在球上添加了圆形物理体。如何制作,什么是概念,只与球和球棒发生碰撞,而不是在球员的身体和球之间发生碰撞? 蝙蝠与玩家一起出现在每个图像上。 我正在使用 Cocos2d-x 和 Chipmunk,但如果这个问题可以解决,我可以轻松切换到 Box2d。
【问题讨论】:
标签: cocos2d-x box2d game-physics chipmunk
您正在寻找的是一种区分物理世界中碰撞的方法。使用 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 并从函数中返回。这应该可以解决问题。我用它来处理或忽略特定类型的碰撞。
我希望这会有所帮助。
【讨论】: