b2DistanceJointDef锚点

时间:2014-05-12 14:38:06

标签: ios box2d cocos2d-x box2d-iphone

我刚开始做Box2d编程。我正在尝试创建一个平台游戏。当玩家(动态身体)跳跃并降落在移动平台(运动体)上时,我需要让玩家留下并与平台一起移动。所以我尝试使用距离关节将玩家“粘”到平台上。但是,我设置了锚点-Y,以便玩家将保持在平台之上,但我不想设置修复X.我应该使用什么方法?

例如:

  • A.当玩家从右向左跳跃时,它将落在左侧。
  • B中。当玩家从左向右跳跃时,它将落在右侧。

因此,当玩家从任何位置跳跃时,X将基于玩家,除了Y是固定的。谢谢。

enter image description here

b2DistanceJointDef jointDef;

b2Vec2 playerAnchor = curPlayerBody->GetWorldPoint(b2Vec2( 1, -0.8));


jointDef.Initialize( curPlayerBody, curPlatformBody, playerAnchor, curPlatformBody->GetWorldCenter() );
jointDef.length = 0;
jointDef.dampingRatio = 0;
jointDef.frequencyHz = 0;
jointDef.collideConnected = false;
playerPlatformJoint = (b2DistanceJoint*)world->CreateJoint(&jointDef);

2 个答案:

答案 0 :(得分:2)

我假设您不想修复X,因为您希望玩家在平台上沿X轴移动。

我不认为距离关节是一个很好的解决方案。

做你想做的事情的一种方法是将玩家和平台夹具的摩擦力设置到使他们“坚持”的水平。在平台移动时一起。您还应该看一下摩擦接头,让您以更动态的方式设置摩擦力。您可以在Box2D手册的FixtureJoint章节中了解有关摩擦和摩擦接头的更多信息。

另一种做你想要的方法是同步你的播放器和平台的运动。但这取决于你如何移动平台和播放器。例如,如果你是通过冲动做到这一点,你可以将适用于平台的相同冲动应用到你的播放器另外到你已经适用于播放器的任何内容。但是,您必须考虑质量等属性。

还要注意如何移动平台。如果您手动设置平台的位置而不是使用脉冲,速度或力,则会导致上述解决方案出现问题。

答案 1 :(得分:0)

我设法找到了答案。这个想法是使用焊接接头并手动移动播放器。

Referenced from here