Как исправить очень странную проблему с обнаружением линий/прямоугольников? [закрыто]C++

Программы на C++. Форум разработчиков
Anonymous
Как исправить очень странную проблему с обнаружением линий/прямоугольников? [закрыто]

Сообщение Anonymous »

Я программирую очень простой 2D-физический движок для игры. Движок спроектирован довольно быстрым, поэтому поначалу я надеялся использовать для всего ограничивающие рамки, выровненные по осям.
Физический движок вычисляет препятствия впереди для каждого пикселя, в котором перемещается прямоугольник. Если он обнаружит впереди препятствия, он не сдвинет его, а остановит. Чтобы выполнить проверку, я просто просмотрел все сплошные игровые объекты и проверил, находится ли рядом с ними прямоугольник. (на один пиксель от прямоугольника, чтобы они никогда по-настоящему не «касались» и оба застряли!)
Ну, функция столкновения не работала. Я использовал типичную функцию столкновения, которую можно найти в Интернете: выясните, не пересекаются ли они, и отмените результат.
Интересно, и в этом суть всего вопроса, функция столкновения работала только для верхней и левой сторон прямоугольника. Пожалуйста, дайте мне знать, как мне добиться столкновения нижней и левой частей!
После того, как прямоугольники не сработали, я решил переключиться на линии. Чтобы проверить, пересекаются ли линии, я использовал этот алгоритм (с несколькими небольшими изменениями), так как полагал, что он будет проверен в боевых условиях и быстро появится на конкурентном сайте программирования. (Если вам интересно, позже я также опробовал алгоритм на компьютерных фанатах, и он дал почти идентичные результаты.)
На этот раз я построил обоих актеров из 4 строк. Если актер движется вправо, проверяется правый датчик. Если вверх, проверяется верх и т. д.
Во всяком случае, это дало те же результаты :( Сплошной объект, теперь построенный из 4 линий, имеет только 2 рабочие линии, верхнюю и левую. Правая и нижняя не работают вообще. Кто-нибудь знает, почему это происходит и как я могу это исправить?
Что касается игрового движка/фреймворка, я использую открытые фреймворки, но по сути весь код здесь мой, кроме функции обнаружения линий и некоторых обертка

Подробнее здесь: https://stackoverflow.com/questions/798 ... -detection

Вернуться в «C++»