Как хобби, я разрабатываю 2D-игру. У меня есть базовое обнаружение столкновений, реализованное с использованием метода разделительной оси. Когда сталкиваются два объекта, я проецирую одно из них из столкновений по оси, которая имеет наименьшее количество перекрытий.Проектирование объектов вне столкновений
Проблема, с которой я сталкиваюсь, заключается в том, что, когда объект движется довольно быстро, ось, которая имеет наименьшее количество перекрытий, не всегда является правильным направлением. Лучший пример: когда объект движется вниз (вдоль оси + y) из-за симулированного гравитационного притяжения и сталкивается с объектом окружения, близким к «краю» (как на краю скалы). Если объект падал достаточно быстро, ось с наименьшим количеством перекрывающихся ветров становится осью х, и объект сдвигается вбок вдоль оси х.
Каков наилучший способ обработки быстро движущихся объектов? Я подумывал о перемещении падающего объекта небольшими приращениями, что, похоже, добавляет много дополнительных накладных расходов. Я также подумал о том, чтобы предоставить объектам среды «предпочтение», для которой ось проецирует падающий объект, но это кажется беспорядочным и подверженным ошибкам.
Есть ли способ сделать это, не добавляя много дополнительных накладных расходов?
Ну, вы также можете проверить непрерывное обнаружение столкновений - HTTP: // www.gamedev.net/reference/programming/features/ellipsoid-ccd/ –
Кроме того, я знаю, что вы делаете это как хобби, но если вы хотите просмотреть хороший 2D-CCD-код, посмотрите Box2D (который также имеет C# порт, называемый Box2DX, если вы входите в эту вещь). С открытым исходным кодом и в хорошем состоянии. –
Благодарим вас за предложения. Материал на CCD выглядит очень интересным. – Pimpl