Ходьба по неровной поверхности в платформере в Game Maker
Всем привет! Сегодня я Вам расскажу о том, как реализовать ходьбу по неровной поверхности в плаформере. Для начала давайте рассмотрим способ данной реализации. Итак. Для работы моего способа у вас ходьба в платформере должна быть осуществлена следующим образом: при движении спрайт игрока должен отражаться соответственно направлениям, т.е. если игрок движется влево, то image_xscale = -1;, иначе image_xscale = 1;. Каким же образом мы будем перемещать игрока вдоль неровной поверхности? К нам на помощь приходят циклы. Циклом мы проверяем кажду свободную позицию впереди игрока и чуть выше, и если эта эта позиция свободна, то перемещаем туда игрока. Давайте теперь рассмотрим код. (Данный код помещать в Step) var Dir, D, xn, yn; if image_xscale == -1 {Dir = 180; D = -10} else {Dir = 0; D = 10} if place_meeting(x+D, y, o_solid) { for(i = 0; i < 135; i += 2) { xn = x + lengthdir_x(speed, Dir + i); yn = y + lengthdir_y(speed, Dir + i); if place_free(xn, yn) {x = xn; y = yn; exit;} } } В начале мы объявляем временные переменные, хранящие направление игрока и позицию впереди игрока. Dir - напрвление D - отражение спрайта (сторона, в которую смотрит игрок) xn, yn - переменные, хранящие свободную позицию перед игроком. Далее изменяем эти переменные. Если спрайт отражён влево, т.е. игрок смотрит влево, то изменяем Dir на 180 (180 - направление влево), D - присваиваем значение -10 (-10 - позиция левее). Аналогично с другим. Далее ставим проверку на столкновение с объектом. x+D - из переменной D считывается текущее направление игрока. (Лучше всего для всех твёрдых объектов создать один родительский, и проверять столкновение только с ним, потому, что проверять столкновения со всеми объектами - очень трудоёмкий процесс) И если столкновение произошло, то запускаем цикл, проверяющий все свободные позиции относительно игрока, и если эта позиция найдена, то в переменные xn, yn записываем найденную свободную позицию и ставим проверку на эту позицию, и если она свободна, то перемещаем туда игрока и выходим из цикла. На этом урок окончен. Спасибо за внимание! До новых встреч! | |
| |
Просмотров: 1342 | |
Всего комментариев: 0 | |