我正在创建一个自上而下的基于 2d tile 的游戏,并且在将 box2d 设置为以特定方式工作时遇到了一些麻烦。
基本上,我需要的是让所有 box2d 主体都遵循某些规则:
1)它们不重叠
2)他们不互相插入
3)他们仍然碰撞并提供碰撞联系人列表
我已将重力设置为 0,并且仅使用 setLinearVelocity 移动我的 body ,因为我需要它们以恒定速度移动,并且没有任何惯性效应。
看起来我需要一个静态的 body ,但可以手动移动。
我以为我可以使用运动体,但结果它们彼此重叠并且没有联系人列表。
有没有办法制作一个可以碰撞但不能相互插入的实体?
最佳答案
一种方法是为每个动态体创建一个运动体作为“阴影”体,使用完全相同的装置。在非常时间步之后,设置运动体的位置、角度、线速度和角速度,使其与被遮蔽的动力体的位置、角度、线速度和角速度相匹配。
原始动态夹具应设置为不与自己的阴影夹具碰撞,并且不与具有阴影主体的物体的原始夹具碰撞。
当两组这样的物体碰撞时,它们的阴影物体会阻止相对的动态物体插入它们,但它们仍然可以与世界上的其他装置正常碰撞。
请记住,Box2D 非常努力地复制我们在现实世界中看到的物理,而您在这里所要求的完全不现实。您可能会看到一些非常奇怪的行为,尤其是当您尝试将这些尸体堆在一起时,即使它们遵循您的规则。但是,对于不需要堆积实体的自上而下的场景,这可能没问题。
关于box2d,不能互相插入的动态物体,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20932819/