我想做的是创建绳索游戏。下面你可以找到一部电影,它现在看起来是什么样子。
https://youtu.be/QTULCGNF70I
我正在使用RopeJoint,我正在减少每帧的maxLength,以便能够加速。一切看起来都很好,但问题出现在泡沫球上。我意识到缩短绳子并不能提高球的速度。例如,如果我把绳子完全垂直地扔,而唯一的"力"来自于缩短绳子,那么速度是0,0。看起来,身体运动不是模拟的吗?
我松开绳子后,失去了动力。气泡可以飞,但绳索缩短的因素被忽略了。
我不知道你是否理解我的意思。这部电影应该能更好地说明这一点。
我尝试过的解决方法:
- 好主意是使用棱镜关节,但旋转是固定的,所以它不起作用。我不会荡秋千
- 另一个想法是使用轮式关节并利用其频率参数然而,这里有一个问题,绳子变成了橡胶。摆动感觉不好,当它可以延伸超过初始长度时应该始终只缩短
我看到了解决方案,但它们不可用
- 绳索关节,通过绳索缩短保持身体动量
- 无固定旋转的棱镜接头
- WheelJoint可以设置最大长度或使用其最大长度创建绳索,而不是静止位置
我想与您分享我最终是如何处理的。
- 我拍摄了一个"绳索子弹",它是一个小的圆形盒子2d机身,通过设置它的速度和角度。我在子弹和球之间绘制了一个绳索图形
- 当子弹到达墙壁时,我从contactListener获得了联系点
- 我根据子弹中心和接触点,用revoluteJoint连接子弹和墙壁。有了这样的解决方案,子弹就可以在绳索上旋转和摆动
- 在绳子的另一端,我创造了一个类似圆形物体的"转子"。它一直与球体相连,另一个旋转关节连接到两个中心。它允许球自由旋转
- 现在我用棱镜连接绳索子弹和转子。轴i通过计算它们之间的矢量并对其进行归一化来设置
- 我根据自己的需要设置了一个棱柱关节极限、电机速度和最大力
- 这个球是被世界的引力碰到的,所以我不得不再做一个技巧来让它满足。我在box2d reddit上描述了这个问题和技巧,所以我引用了它:https://www.reddit.com/r/box2d/comments/gpdmoc/prismatic_joint_behaves_like_rubber/