在我正在使用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会衰减。
这是因为碰撞解决方案的数量随着对象在静止时花费更多的时间而增加。但是,许多计算都是“无用的”,因为对象已经相对彼此沉降到稳定的位置。
避免这些“无用的”碰撞检测的最佳实践(最好是不需要物理学位)是什么?
编辑:接受DMGregory提示,并得出此结果(尚不理想)
(红色=静态,蓝色=活动,绿色=睡眠)