box2d,不能互相推动的动态物体

问题描述 投票:0回答:3

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

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

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

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

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

有没有办法让固体可以碰撞,但不能互相推动?

box2d
3个回答
1
投票

实现此目的的一种方法是为每个动态主体创建一个运动主体作为“影子”主体,并具有完全相同的固定装置。在每个时间步长之后,设置运动体的位置、角度、线速度和角速度,以匹配其阴影的动态体的位置、角度、线速度和角速度。

原始动态夹具应设置为不与其自身的阴影夹具发生碰撞,对于具有阴影物体的物体,也应设置为不与原始夹具发生碰撞。

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

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


0
投票

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


0
投票

十年后,我还在为同样的问题而苦苦挣扎!解决方案可能是默认情况下将所有角色设置为静态主体,但当它们应该移动时将它们切换为动态主体

因此,如果行走的角色与站立的角色发生碰撞,站立的角色根本不会受到影响。如果它们都移动,它们就会像动态物体一样相互影响,但这实际上听起来有点令人意外。

我没有测量性能影响,但我认为它可以忽略不计。切换不会每帧都发生,而且我没有很多角色。

© www.soinside.com 2019 - 2024. All rights reserved.