【问题标题】:box2d, dynamic bodies that can't push each otherbox2d,不能相互推动的动态物体
【发布时间】:2023-03-17 12:58:01
【问题描述】:

我正在创建一个基于图块的自上而下的 2d 游戏,但在设置 box2d 以使其以特定方式工作时遇到了一些麻烦。

基本上,我需要的是让所有 box2d 主体都遵循某些规则: 1)它们不重叠 2)他们不互相推动 3)他们仍然碰撞并提供碰撞联系人列表

我已将重力设置为 0,并且仅使用 setLinearVelocity 移动我的身体,因为我需要它们以恒定速度移动,并且没有任何惯性效应。

看起来我需要一个静态的身体,但可以手动移动。

我以为我可以使用运动体,但结果发现它们相互重叠并且没有联系人列表。

有没有办法制作一个可以碰撞但不能相互推动的实体?

【问题讨论】:

    标签: box2d


    【解决方案1】:

    一种方法是为每个动态体创建一个运动学体作为“阴影”体,并使用完全相同的固定装置。在非常时间步之后,设置运动体的位置、角度、线速度和角速度,使其与被阴影的动态体相匹配。

    原动态fixture应设置为不与自己的shadow fixture碰撞,对于有shadow body的body也不碰撞原始fixture。

    当两组这样的物体碰撞时,它们的影子物体会阻止对方的动态物体推动它们,但它们仍然可以与世界上的其他灯具正常碰撞。

    请记住,Box2D 非常努力地复制我们在现实世界中看到的物理,而您在这里所要求的根本不现实。您可能会看到一些非常奇怪的行为,尤其是当您尝试将这些尸体堆在一起时,即使它们遵循您的规则。但是,对于不需要堆积尸体的自上而下的场景,它可能没问题。

    【讨论】:

    • 你能在你的网站上做一个教程吗?
    【解决方案2】:

    尝试将质量设置为无穷大 - 这应该可以防止它们被其他物体移动,同时仍然能够手动设置它们的速度。如果这不起作用,请尝试将质量设置为 0。

    【讨论】:

    • =\ 如果我将质量设置为无穷大 - 它们开始像运动体一样(有重叠和东西)。 0 也无济于事。
    • 嗯。他们可能表现得像运动体,但他们并没有丢失联系人列表。所以我只需要阻止身体与其他身体接触,也许就足够了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多