Дискретная реализация вынуждает вас вводить некоторую непрерывную математику в систему, только когда это необходимо (кубы / направления перекрываются).
Для каждого куба c1 , c2 ... ci , с которым пользовательский куб ( uc ) пересекается во время проверки, вы хотите выяснить, к какому кубу было «прикоснуто» первым - есть только одинкак в реальной жизни.Рассмотрим направление d
из uc , и, взяв сумму uc в ci (перекрытие), найдите положение cu в то время, когда он «коснулся» ci .
Определите, к какому кубу «прикоснулись» первыми cj (тот, который требовал наибольшего отката по оси d
- чем раньше, тем лучше) и используйте только этот для расчета реакции на столкновение.
Не только вы достигнете точности.но это поможет, если все кубы движутся, имеют разные скорости и т.д ...