我刚开始做 Box2d 编程。我正在尝试创建平台游戏。当玩家(动态体)跳跃并降落在移动平台(运动体)上时,我需要让玩家与平台一起停留和移动。所以我尝试使用距离关节将玩家“粘”到平台上。但是,我已经设置了 anchor Y,这样玩家将停留在平台上方,但我不想设置固定点 X。我应该使用什么方法?
例如:
- A.当玩家从右跳到左时,它会落在左边。
- B.当玩家从左向右跳时,它会落在右边。
因此,当玩家从任何位置跳跃时,X 将基于玩家,但 Y 是固定的。谢谢。
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);
最佳答案
我假设您不想固定 X,因为您希望玩家在平台上沿 X 轴移动。
我认为距离关节不是一个很好的解决方案。
做您想要的事情的一种方法是将播放器和平台固定装置的摩擦力设置为一个水平,使它们在平台移动时“粘”在一起。您还应该看看 Friction Joint,它可以让您以更动态的方式设置摩擦力。您可以在 Fixture 中了解有关摩擦和摩擦接头的更多信息和 Joint Box2D 手册的章节。
另一种方法是同步播放器和平台的移动。但这在一定程度上取决于您如何移动平台和播放器。例如,如果您是一时冲动,那么您可以将应用于平台的相同冲动应用于您的播放器,另外您已经应用于播放器的任何内容。不过,您必须考虑质量等属性。
还要注意移动平台的方式。如果您手动设置平台的位置而不是使用脉冲、速度或力,则会导致上述解决方案出现问题。
关于ios - b2DistanceJointDef anchor ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23611958/