对于libgdx
box2d
的游戏,我希望能够Player
蹲伏。蹲伏应该将其Fixture
更改为1 * 1m的hitbox而不是0.5 * 2m的hitbox。
一种可能性是存储2 Body
s,一个用于正常,一个用于蹲伏。然后,如果Player
想要蹲下,我可以从Body
中移除第一个World
并添加第二个Body
,但这种方式似乎很复杂。
是否有更容易的可能性?
感谢
答案 0 :(得分:1)
正如你所说,解决这个问题的一种方法是让两个身体都存在。
具体来说,您可以在相应的灯具上设置Filters。然后,您将可以使用filters替换“免除”/“包含”相应的碰撞。
请注意,正如setFilterData
的JavaDoc所说:
设置联系人过滤数据。这不会更新联系人,直到 当父母身体处于活动状态并且清醒时的下一个步骤。这个 自动调用Refilter。
有关详细信息,请参阅box2d manual中的 9.5 Contact Filtering 部分(适用于C ++实现,但应该足够清晰,以便了解整体情况),以及上述内容Filters JavaDoc
编辑:关于评论 - 对于奖励,您还可以实际设置"unused" body to sleep 。
关于Mass
,因为你没有提到它我假设你只使用box2d进行碰撞。
但如果情况并非如此 - 那么,您必须检查模拟中的作用并进行相应调整。例如 - 一个“更宽”的矩形(即“站立”命中箱)在四肢击中时可能会获得更大的旋转动量。
在“大众”案例中,您还应考虑使用联合,例如一个WeldJoint来“同步”你的两个hitbox。