Физический движок вычисляет препятствия впереди для каждого пикселя, в котором перемещается прямоугольник. Если он обнаружит впереди препятствия, он не сдвинет его, а остановит. Чтобы выполнить проверку, я просто просмотрел все сплошные игровые объекты и проверил, находится ли рядом с ними прямоугольник. (на один пиксель от прямоугольника, чтобы они никогда по-настоящему не «касались» и оба застряли!)
Ну, функция столкновения не работала. Я использовал типичную функцию столкновения, которую можно найти в Интернете: выясните, не пересекаются ли они, и отмените результат.
Интересно, и в этом суть всего вопроса, функция столкновения работала только для верхней и левой сторон прямоугольника. Пожалуйста, дайте мне знать, как мне добиться столкновения нижней и левой частей!
После того, как прямоугольники не сработали, я решил переключиться на линии. Чтобы проверить, пересекаются ли линии, я использовал этот алгоритм (с несколькими небольшими изменениями), так как полагал, что он будет проверен в боевых условиях и быстро появится на конкурентном сайте программирования. (Если вам интересно, позже я также опробовал алгоритм на компьютерных фанатах, и он дал почти идентичные результаты.)
На этот раз я построил обоих актеров из 4 строк. Если актер движется вправо, проверяется правый датчик. Если вверх, проверяется верх и т. д.
Во всяком случае, это дало те же результаты
Что касается игрового движка/фреймворка, я использую открытые фреймворки, но по сути весь код здесь мой, кроме функции обнаружения линий и некоторых обертка
Подробнее здесь: https://stackoverflow.com/questions/798 ... -detection
Мобильная версия