Предположим, я использую простую дискретную систему обнаружения столкновений, в которой я перемещаю все объекты, а затем проверяю наличие столкновений. Я хочу, чтобы любые сталкивающиеся объекты были отделены (конечно) и назначены соответствующие скорости реакции (отскок, скольжение, остановка и т. Д.).
Когда у меня есть пару сталкивающихся объектов, как я их разделить, не разрывая с одного или обоих из них сталкиваясь с другими объектами?
Единственный способ предотвратить это - это предотвратить проникновение. Прежде чем перемещать объект, убедитесь, что это законный ход. Обратите внимание, что это означает, что вы должны перемещать свои объекты по одному, чтобы избежать случая, когда два объекта движутся друг к другу.
Если не происходит проникновение вам не придется сбросить ни одной позиции, и, таким образом, вы не будете запускать любые вторичные проходки.
источник
Я обычно делаю следующее:
Когда вы разделяете объекты и у вас возникает больше коллизий, вы просто повторяете итерацию до тех пор, пока не будет достигнуто максимальное количество шагов или пока объекты не пройдут меньше предварительно определенного порога.
источник