Ходьба по неровной поверхности в платформере в 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 записываем найденную свободную позицию и ставим проверку на эту позицию, и если она свободна, то перемещаем туда игрока и выходим из цикла.

На этом урок окончен. Спасибо за внимание! До новых встреч!
Категория: Уроки по Game Maker | Добавил: Dogvill (21.07.2011)
Просмотров: 1342 | Рейтинг: 5.0/3
Всего комментариев: 0
Имя *:
Email:
Код *: