Я решил это, используя почти грубую силу
for each object as a
for each colliding object as c
if should_swallow(a, c)
swallow(a, c)
и делайте это в цикле несколько раз, потому что объекты растут, когда они проглатывают другие объекты, поэтому проверку на столкновение необходимо выполнить снова (новые перекрытия могут появиться в середине цикла). Никогда не ударяйте больше 3-х циклов, учитывая количество объектов, с которыми я работаю.
Функция should_swallow () определяет, лучше ли проглотить объект или проглотить его, на основе размера, положения и того, что произошло в предыдущих кадрах, чтобы предотвратить мерцание.