Box2d RopeJoint错误修复或替代解决方案



我想做的是创建绳索游戏。下面你可以找到一部电影,它现在看起来是什么样子。

https://youtu.be/QTULCGNF70I

我正在使用RopeJoint,我正在减少每帧的maxLength,以便能够加速。一切看起来都很好,但问题出现在泡沫球上。我意识到缩短绳子并不能提高球的速度。例如,如果我把绳子完全垂直地扔,而唯一的"力"来自于缩短绳子,那么速度是0,0。看起来,身体运动不是模拟的吗?

我松开绳子后,失去了动力。气泡可以飞,但绳索缩短的因素被忽略了。

我不知道你是否理解我的意思。这部电影应该能更好地说明这一点。

我尝试过的解决方法:

  • 好主意是使用棱镜关节,但旋转是固定的,所以它不起作用。我不会荡秋千
  • 另一个想法是使用轮式关节并利用其频率参数然而,这里有一个问题,绳子变成了橡胶。摆动感觉不好,当它可以延伸超过初始长度时应该始终只缩短

我看到了解决方案,但它们不可用

  • 绳索关节,通过绳索缩短保持身体动量
  • 无固定旋转的棱镜接头
  • WheelJoint可以设置最大长度或使用其最大长度创建绳索,而不是静止位置

我想与您分享我最终是如何处理的。

  1. 我拍摄了一个"绳索子弹",它是一个小的圆形盒子2d机身,通过设置它的速度和角度。我在子弹和球之间绘制了一个绳索图形
  2. 当子弹到达墙壁时,我从contactListener获得了联系点
  3. 我根据子弹中心和接触点,用revoluteJoint连接子弹和墙壁。有了这样的解决方案,子弹就可以在绳索上旋转和摆动
  4. 在绳子的另一端,我创造了一个类似圆形物体的"转子"。它一直与球体相连,另一个旋转关节连接到两个中心。它允许球自由旋转
  5. 现在我用棱镜连接绳索子弹和转子。轴i通过计算它们之间的矢量并对其进行归一化来设置
  6. 我根据自己的需要设置了一个棱柱关节极限、电机速度和最大力
  7. 这个球是被世界的引力碰到的,所以我不得不再做一个技巧来让它满足。我在box2d reddit上描述了这个问题和技巧,所以我引用了它:https://www.reddit.com/r/box2d/comments/gpdmoc/prismatic_joint_behaves_like_rubber/

最新更新