[]关于物理引擎matter.js刚体穿透问题的一些研究和解决方法

刚体会穿透这个问题是无解的,几乎所有的2d游戏物理引擎都有这个问题,matter官方也找不到从引擎设置解决此问题的方法。所以我用自己提出并试验过的一些方法不完美的解决了这个问题。这些方法有可能有用,也可能没用。需要组合起来使用,大大的降低了刚体穿透的概率。这些方法是:
刚体叠加、动量重置、强制跟随、动量缓冲、动态拦截。
下面我解释他们的意思:
刚体叠加就是在同个位置设置多个刚体,这方法对静态刚体有用,可以提高拦截成功率;动量重置是在容易穿透的地方设一个坐标检测区,在移动刚体进入这个区域后立刻让其休眠,旋即唤醒。看似多此一举,实则在休眠时已经重置了其动量,加速惯性就消失了,然后再运动,惯性就小了很多;强制跟随是渲染物体和刚体间的对应关系不稳定,因为laya和matter的坐标不同,导致了这个渲染体和刚体的位置有偏差,可以通过观察其对应位置来设置偏移量,但一旦刚体旋转就会变乱。这时要用三角函数来修正。这需要观察和耐心的修正位置来解决;动量缓冲是在容易穿透的位置动态的设置一个反方向的作用力,来部分抵消移动刚体的动量;动态拦截是一种比较高级的应对方式,在可能穿透的地方设置一个强壮的刚体,通过判断移动刚体的位置,如果将要抵达穿透多发地带,则强壮刚体移动到穿透区,加强穿透区的防御力量。这个方法和刚体叠加的区别是这个可以用于动态刚体的防穿保护,在动态刚体移动的同时,强壮刚体也可以伴随动态刚体移动,直到通过穿透易发区为止,强壮刚体就像是特殊路段的保镖一样。
这些方法都有不同场景下的适用性,多个方法协同作用大大降低了刚体穿透的问题。
 
更多方法欢迎大家和我交流,我的微信号:kyome262 加我请注明是laya
已邀请:

Aaron1111

赞同来自:

非常棒

liu282713097

赞同来自:

我的想法是去研究matter的底层移动代码。在他的移动逻辑,加上预移动,以前cocos就这么搞的

A

赞同来自:

关于刚体穿透,我有个想法,是否可行,拿出来大家一起探讨:
1.获取所有物体的当前速度,取其中最大速度
2.获取所有物体的宽高,取最小宽高
3.根据最大速度和最小宽高,可知晓系统最小步进周期,在缓存中提前进行碰撞演练
 
因其中未考虑加速度的情况,估计会有很少的情况下会产生刚体穿透,但是感觉应该可以解决80%的穿透问题

151*****724

赞同来自:

刚体不是只能加一个么

要回复问题请先

商务合作
商务合作