libgdx - Box2d RopeJoint 错误 - 修复或替代解决方案?
问题描述
我想做的是创造绳索游戏。您可以在下面找到一部电影现在的样子。
我正在使用 RopeJoint 并且我正在减少每帧的 maxLength 以便能够加速。一切似乎都很好,但问题出现在泡泡球上。我意识到缩短绳索不会增加球的速度。例如,如果我将绳子完全垂直扔,唯一的“力”来自缩短绳子,速度为 0,0。好像,身体动作不是模拟的?
在我松开绳子后,动力就消失了。气泡可以飞,但绳子缩短的因素被忽略了。
我不知道你是否明白我的意思。电影应该更清楚地说明这一点。
我试过的解决方法:
- 好主意是使用 prismaticJoint,但旋转是固定的,所以它不起作用。我不能摆动
- 另一个想法是使用 wheelJoint 并利用它的频率参数。然而这里有一个问题,绳子变成橡胶。摇摆感觉不好,当它可以延伸超过初始长度时,它应该总是只缩短。
我看到的解决方案,但它们不可用
- RopeJoint 可保持身体动力免受绳索缩短
- 无固定旋转的棱柱关节
- WheelJoint 可以设置最大长度或创建最大长度的绳索,而不是静止位置。
解决方案
最后想和大家分享一下我是怎么处理的。
- 我通过设置它的速度和角度来拍摄一个小的圆形 box2d 体“ropeBullet”。我在子弹和球之间渲染了一个绳索图形。
- 当子弹到达墙壁时,我从 contactListener 获得接触点
- 我根据子弹中心和接触点用 revoluteJoint 连接子弹和墙壁。由于这种解决方案,子弹可以旋转并且可以在绳索上摆动。
- 在绳子的另一端,我创建了类似圆形体的“转子”。它始终与球体相连,另一个旋转接头连接到两个中心。它允许球自由旋转。
- 现在我用 prismaticJoint 连接ropeBullet 和转子。我通过计算它们之间的向量并将其归一化来设置轴。
- 我根据需要设置了棱柱形关节限制、电机速度和最大力。
- 球被世界的万有引力所触动,所以我不得不再做一招让它令人满意。我在 box2d reddit 上描述了问题和技巧,所以我参考了它:https ://www.reddit.com/r/box2d/comments/gpdmoc/prismatic_joint_behaves_like_rubber/
推荐阅读
- javascript - Vuetify - v-tooltip 对断点没有响应?
- ios - 如何设置两个 UILabel 压缩优先级以使一个垂直推动另一个?
- c#-4.0 - 如何在 C# 中查找当前文件位置?
- kubernetes - Kubernetes Ingress 使用 fabric8 返回不同的证书,而不是使用 curl
- module - Agda 中匿名模块的用途
- java - 排序列表的问题
- > 爪哇?
- swift - 快速裁剪 UIImage 失败
- python - python没有打印出“字符
- javascript - 如何获取div标签内的属性?
- html - HTML/CSS (ePub) - 调整图像大小:使用最大宽度/高度时,某些图像非常小