Многое зависит от деталей.Полное решение может принимать во внимание скорости или другие проблемы.Но относиться к этому просто ...
Вы не хотите всегда сначала разрешать по вертикали.Представьте, что актер толкает горизонтально в блок.Если вы сначала разрешите по вертикали, тогда актер появится над этим блоком, когда было бы достаточно небольшого горизонтального перемещения.
Найдите, какие вертикальные и горизонтальные движения должны были бы быть, чтобы «выйти из столкновения», изатем примените один с наименьшим абсолютным значением.
Затем повторите несколько раз, если движение помещает актера в другой блок.Но не повторяйся вечно, потому что актер может быть втиснут в то место, которое никогда не разрешится.
Возможно, если твое последнее движение все еще оставляет тебя в столкновении, ты можешь просто усреднить последние два движения и оставить его там.*