Ответ в теме: Взаимодействие с картой

SFML и C++ Уроки \ Разработка игр Форумы Логика игр Взаимодействие с картой Ответ в теме: Взаимодействие с картой

#4676

tobidashi
Участник
Сообщений:16

Зарегистрирован:
25.05.2017

Репутация:7

Всё зависит от размеров прямоугольника персонажа, размеров тайла карты и направления столкновения. Допустим, персонаж столкнулся с тайлом карты при движении слева направо. Тогда он немного “продавит” этот тайл и должен будет оттолкнуться от него влево. Мы в коде должны сами прописать координату, в которой он окажется после столкновения, а эта координата как раз определяется размерами прямоугольника персонажа и тайлов карты. А именно, персонаж после столкновения должен вплотную прилегать к тайлу карты, с которым он столкнулся, отсюда можно найти координаты персонажа после коллизии. Если персонаж двигался слева направо, то после столкновения нужно от левого края прямоугольника карты  отступить влево ширину персонажа, тогда персонаж будет стоять как раз вплотную слева от прямоугольника. А если персонаж двигался справа налево, то к левому краю прямоугольника карты нужно прибавить ширину тайла карты, тогда персонаж окажется как раз вплотную справа от него. Проще всего это понять, если на бумаге схематично нарисовать кусочек карты и вручную промоделировать коллизии персонажа с тайлами карты по всем направлениям (т.е., просто по шагам проследить, как выполнятеся функция interactionWithMap(), чему равны в момент столкновения переменные i и j и т. д.), тогда станет ясно, на какое расстояние нужно его сдвигать.