【问题标题】:Box2D Ring shapeBox2D 环形
【发布时间】:2017-11-21 17:24:58
【问题描述】:

在 Box2D 中创建环形的最佳方法是什么(我所说的环形是指内部有空白空间的动态圆,以便其他动态对象可以放入其中)。

感谢您的提示。

【问题讨论】:

    标签: box2d game-physics liquidfun


    【解决方案1】:

    “最佳”当然是见仁见智,但这里有一些我能想到的方法。请告诉我们(如在评论部分)您决定使用什么。我很想知道!

    用于静态环

    如果环的形状只需要是静态的,那么从链形中构建环是可行的方法。但是,如果环需要是动态的,就像您所说的那样,请继续阅读。

    用于无内环摩擦/恢复的动态环

    如果你不关心物体对内环的摩擦或恢复,你可以通过使用圆形作为环的外径并使用绳索接头来约束你想要的任何东西来设置物理inside 环(只要关节的碰撞连接设置为假)。您只需将关节的最大长度设置为小于圆半径的距离。这将允许圆环自然滚动(因为它的外部是一个圆圈),但不会在圆环内部对它的概念内部产生摩擦或恢复效果。

    对于具有完全模拟内环物理的动态环

    如果环内的对象需要能够像任何其他具有摩擦和恢复力的表面一样与环交互,那么我建议的制作方式(不更改 Box2D 代码本身)将不适用一堆多边形形状。这些都需要定位和调整尺寸以制作戒指并固定在一个单一的身体上。

    您必须做出决定,例如用多少个多边形来制作圆环以及如何将它们对接在一起。多边形越小,数量越多,结果当然越接近圆环。假设您希望多边形重叠的锯齿尽可能小,您可能需要手动设置体重以避免重叠计算的过度计算。

    您的戒指至少需要2 * b2_polygonRadius 的最小厚度(包括其“表皮”)。除此之外,您可以自行决定多边形尺寸之一的大小以匹配您想要的戒指的厚度。

    您可能希望自己编写一个函数,该函数确定您需要匹配位置大小和相对于工作主体的角度方向所需的多边形点。我可以看到用 3 边多边形或 4 边多边形制作环。使用 4 面多边形可能会产生更多对接问题(比使用 3 面多边形),除非您将内部点间隔得更小(以匹配直径差异),但是连续的 4 面多边形不需要像 for三角形的。

    通过修改 Box2D 实现动态环

    如果您愿意/有兴趣更改 Box2D 代码,您可以:

    1. 扩展质量计算代码和碰撞代码以处理边缘形状和链形状的碰撞。或者...
    2. 创建您自己的环形类型。

    鉴于我从 Box2D 派生了一个物理引擎/库,它支持使用链形的动态环形(请参阅PlayRho),我有一些解决此问题的经验;尽管在 Box2D 之外。根据这一经验,如果您确实想修改 Box2D 代码来解决问题,我相信从第一个选择(选项 #1)开始至少是开始的方式。你最终会受益于我认为如果你打算做第二种选择的话你无论如何都需要的经验。

    请注意,无论如何,宽相都需要矩形(实际上是 AABB)的组合。因此,用多边形组合制作环虽然看起来内存效率低于我能想到的其他方法,但在计算效率方面可能会胜出。 YMMV。测试将是唯一确定的方法。

    或者也许...

    可能有人已经为 Box2D 制作了一个环形形状并为其提供了资源,但我知道的唯一形状扩展是胶囊形状。

    【讨论】:

    • 感谢您提供的非常翔实的回答!这肯定会成为一个很好的实验指南。为了进一步指定我要查找的内容 - 我需要一个动态环形对象,该对象可以在其中包含其他动态对象。我认为让“环”容器转动从而影响内部元素(有点像彩票)会是一个很好的视觉效果。第二种方法听起来最简单,但我也想概括形状并可能稍后对其应用一些弹性(通过 LiquidFun 扩展) - 这种方法是否也适用于粒子组?
    • @P.Lance 我不知道粒子组会有什么效果。对不起。不过,至少为了我自己的利益,我会调查一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多