В физическом движке, который я разрабатываю (для обучения) с использованием love-2d , я реализовал разрешение столкновений следующим образом:
FixedUpdate(dt) // I use fixed timestep
foreach collide c1 in allNotStaticColliders
c1.integartePhysic // i.e. apply gravitational force..
foreach collider c2 "near" c1 // "near"= I use spatial hashing
if collide(c1,c2)
resolve collision (c1,c2) // the heavy operation
collison callbacks c1
collison callbacks c2
...
Как вы можете видеть в конце анимации gif, происходит затухание FPS, когда все коллайдеры почти заземлены на статический объект.
Это связано с тем, что количество разрешений столкновений растет, поскольку объекты проводят больше времени, касаясь их при установлении. Тем не менее, многие из расчетов «бесполезны», потому что объекты уже установились в устойчивых положениях друг против друга.
Какова лучшая практика (надеюсь, не требующая степени физики), чтобы избежать этих «бесполезных» обнаружений столкновений?
Редактировать: принимал DMGгоряди намеки и приходи к этому результату (пока не оптимально)
(Красный = статический, синий = активный, зеленый = спящий)