В последнее время я пытался создать движок 2D-платформера на C ++ с Direct2D. Проблема, с которой я сталкиваюсь в настоящее время, заключается в том, чтобы заставить объекты, которые опираются друг на друга, правильно взаимодействовать после применения таких ускорений, как гравитация.
Прямо сейчас я могу обнаруживать столкновения и правильно на них реагировать (я думаю), и когда объекты сталкиваются, они запоминают, против каких объектов они опираются, поэтому объекты могут быть вытолкнуты другими объектами (обратите внимание, что при любых столкновениях отскока нет, поэтому, когда объекты столкнуться они гарантированно станут отдыхать, пока что-то еще не произойдет). Каждый раз, когда происходит симуляция, ускорение объектов применяется к их скоростям (например, vx + = ax * t, где t — время, прошедшее с момента последнего продвижения).
После того, как эти ускорения будут применены, я хочу проверить, движутся ли какие-либо объекты, которые опираются друг на друга, с разными скоростями, чем их аналоги (поскольку разные объекты могут иметь разное ускорение), и в зависимости от этой разницы либо отсоединить два объекта, чтобы они не дольше отдыхать или выровнять свои скорости, чтобы они снова двигались с той же скоростью. У меня возникли проблемы при создании алгоритма, который может сделать это на многих отдыхающих объектах.
Вот диаграмма, чтобы помочь объяснить мою проблему
Задача ещё не решена.
Других решений пока нет …