Это сильно беспокоило меня в последние несколько недель.В это время я проводил исследования в Интернете, даже читал книги в разделе «Компьютеры» в Borders, чтобы попытаться найти ответ, но мне не повезло.
Я запрограммировал редактор 2D-уровней для видеоигр с боковой прокруткой.Теперь я хочу превратить это в игру, где у меня есть игрок, который может бегать и прыгать, чтобы исследовать уровень, похожий на «Марио».
То, что действительно доставляет мне неприятности, - это реакция на столкновение (не обнаружение: я уже знаю, как определить, сталкиваются ли два блока).Вот несколько сценариев, которые я собираюсь проиллюстрировать, чтобы вы могли увидеть мои проблемы (заштрихованные блоки - это земля, стрелка - это вектор скорости игрока, пунктирные линии - проецированный путь игрока).
См. Это изображение сценариев реакции на столкновение:
http://dl.dropbox.com/u/12556943/collision_detection.jpg
Предположим, что векторы скорости в сценариях (1) и (2) равны (одинаковое направление и величина),Тем не менее, в сценарии (1) игрок ударяет по стороне блока, а в сценарии (2) игрок приземляется на вершину блока.Это позволяет мне сделать вывод, что определение реакции на столкновение зависит не только от вектора скорости игрока, но и от относительного положения игрока относительно сталкивающегося блока.Это приводит к моему первому вопросу: зная вектор скорости и относительное положение игрока, как я могу определить, с какого направления (слева, справа, сверху или снизу) игрок сталкивается с блоком?
Другая проблема, с которой я столкнулся, заключается в том, как определить реакцию на столкновение, если игрок сталкивается с несколькими блоками в одном кадре.Например, предположим, что в сценарии (3) игрок сталкивается с обоими этими блоками одновременно.Я предполагаю, что мне придется проходить через каждый блок, с которым сталкивается игрок, и соответственно корректировать реакцию каждого блока.Подводя итог, это мой второй вопрос: как мне реагировать на столкновение, если игрок сталкивается с несколькими блоками?
Обратите внимание, что я никогда не раскрывал язык, на котором я программирую;это потому, что я предпочел бы, чтобы вы не знали (ничего личного, хотя:]).Меня больше интересует псевдокод, чем просмотр кода для конкретного языка.
Спасибо!