Приветствую вас в блоге Econ Dude.
Не так давно я принял решение сделать серию статей и видео на своём канале в ютуб про создание игр в GameMaker.
Хочу сделать курс для новичков с нуля - основы создания игр. Начну я именно с движения, так-как движение - это база для любой игры и понимать как оно устроенно очень важно при программировании, если вы планируйте изучать геймдев.
Если вы работайте в какой-то другой среде программирования и используйте не гейм мейкер (GameMaker), а например unity, то тут вы тоже сможете найти интересную информацию для себя так-как вне зависимости от среды и движка, принципы везде довольно похожи. Движение это самое просто и самое первое, что люди изучают.
Начнём.
Движение персонажа, союзников, нпс, животных или врагов - это основа практически любой игры, особенно игр в базовых жанрах (аркады и платформеры), с которых и нужно начинать свой путь в освоении создания игр.
В таких программах как game maker (studio, 2 или любом другом) всё это сделать довольно просто и в рамках простейшего объектно ориентированного программирования вы можете сделать движение за пару секунд. Но для начала давайте поймём пару вещей: кто будет двигаться,зачем как и куда?
Например, обычно нам нужно что-бы враги двигались на героя. да? А герой, часто, двигается при нажатии на стрелки на клавиатуре (или кнопки q, a, s, d), а может быть вам нужно что-бы какой-то кролик рядом просто бегал от дерева к дереву? Начинать думать с таких простых вещей важно так-как потом уже в коде это вам сильно поможет понять что же вы такое пишите и почему писать нужно именно так, а не иначе.
Как сделать движение в игре? Если вы только начинаете освоение game maker, то вы можете для ваших первых игр всё сделать вообще без какого либо кода. Гейм Мейкер был придуман как раз для новичков и он позволяет делать простые игры и осваивать всё даже без программирования.
Дальше, конечно, код вам понадобиться, но начать можно и вот с такого:
Самые первые и базовые функции движения в Гейм Мейкер
Простейший пример, как сделать движение героя при нажатии на стрелку вверх?
Вот и всё.
Добавляем событие (event) - <UP> и на это вешаем действие (action).
Стрелку вверх, указываем что это относиться к себе (к этому объекту - self), ну и ставим галочку - относительно (relative). Последнее означает что движение идёт относительно текущих координат объекта.
В коде это всё можно сделать вот так:
Как видите и в коде всё очень просто, просто мы меняем координату объекта (героя) на 1 по оси Y. Пишем: y-=1
Какие бывают даже тут ошибки?
Почему минус равно (y-=1), а равно минус (y=-1)?
В первом случае мы меняем координату относительно героя, а во втором он сразу прыгнет в координату Y -1, а это будет на 1 пиксель выше чем экран комнаты.
Есть еще один момент, который смущает новичков.
Иногда координаты в гейм мейкер могут быть немного непонятными. Возьмём две точки что-бы было понятнее.
Вот как оно идёт:
И вот тут иногда бывают непонятки.
Почему вверх, это минус, ведь на других осях таких координат по оси Y больше обычно означает - выше?
Дело в том, что координаты комнат в гейм мейкер строятся от точки 0, 0 (X, Y), которая находится в левом верхнем углу. Соответственно движение вверх будет движение ближе к нулевой точке.
Давайте построим две точки с координатами чтобы лучше это понять.
Точка сверху, х = 400 (пол экрана при разрешении 800 на 600), у = 25.
Точна снизу, x = 400 (на той-же линии по вертикали), у = 125 (По горизонтали)
Теперь представьте что наш герой, или например космический корабль, находится в нижней точке. Какую координату нам нужно изменить чтобы он был выше, Х или У? 400 или 125?
Для движения наверх нам нужно будет вычесть координату У.
Например, если вы напишем У-=100, то объект как раз и переместиться в первую верхнюю точку, хотя это на самом деле даже не совсем движение, а это будет как-бы прыжок или даже телепортация.
Однако если над этим помедитировать, то любое движение это по сути и есть вот такие прыжки, просто очень маленькие и быстро.
Как фильм это куча кадров, так и движение это просто вот такие мелкие шажки/сдвиги по координате во времени. Скорость при этом, как вы знаете из физики, означает какое расстояние за единицу времени пройдёт объект.
Скорость 5 в нашем случае будет означать что за одну единицу времени объект пройдёт 5 клеток (пикселей).
Маленькое отступление.
А что такое в GameMaker, да и в играх, вообще время? Мы тут с вами совсем уже в философию даже уходим, но это на самом деле интересно.
Время в играх как и в жизни изменяется, в секундах, минутах и т.д. Однако, есть в трах такая штука как тики. Тик - это единица времени в играх, по сути дела один кадр. Вам станет всё куда более понятно когда я скажу что количество тиков в секунду это означает уже знакомое вам FPS (frames per second - кадры в секунду).
Еще это называется - кадровая частота.
Общемировой стандарт частоты киносъёмки и проекции составляет 24 кадра в секунду. Это значит что просто картинка меняется 24 раза за секунду и мы видим это как поток, однако на самом деле картинки меняется очень быстро и наш мозг просто не успевает их вычленять. Кстати, когда вы снимаете на камеру старый телевизор, то вы видите черные полосы. Знаете про такое? Вот. Чёрные полосы получаются как раз из-за того, что камера снимает быстрее чем кадры меняются в телевизоре.
Ладно, не заморачивайтесь, но это отступление нам тут было нужно.
Понять про кадровую частоту нам было важно так-как в жизни это всего-лишь скорость смены кадров и всё.
А вот в играх так-же самая вещь (FPS), это и есть время!
Сейчас к вам может прийти божественное откровение, если это случилось, поздравляю.
Ну ладно. это не время, FPS - это как-бы скорость течения времени. Я всё еще больше запутал судя по всему...
Представим что наш объект двигается с игровой скоростью 1 (один пиксель за тик), двигается он направо.
Стартует он с координаты 0, 300 (слева, середина экрана 800 на 600).
Сколько пикселей такой объект пройдёт за 3 секунды и на каких координатах он будет?
Вот видите, хрен мы это поймём если мы не знает FPS!
В играх частота смены кадров сейчас порядка 100 и больше, но иногда можно использовать и 30, и 50 и какую угодно. Чем она больше, чем труднее будет для устройства "переваривать-тянуть" игру.
Если у нас FPS = 50, тогда за одну реальную секунду происходит 50 тиков - 50 действий. И если у вас движение идёт со скоростью 1, то за 3 секунды в таком пространстве объект пройдёт 1 * 50 * 3 = 150 пикселей.
И будет он уже не на координате 0, 300, а на координате 150, 300.
Хотя можно было подумать вначале что скорость 1 это медленно, но это в рамках игры и игровой вселенной (если карта-комната размером 800 на 600) будет очень быстро, если FPS у нас 50.
Хорошо, с этим мы вроде разобрались.
Теперь вы можете сделать объект, например героя, который будет двигаться в 4 стороны с нужной вам скоростью и вы сможете им управлять.
С этого обычно многие начинают делать первые игры. О том как создать объект, как нарисовать спрайт и как запустить игру тут я говорить не буду, это либо слишком легко, либо как-то это упомяну в следующих статьях.
Всё это мы можем назвать свободным управляемым движением, однако, что если вам мало ходьбы в 4 стороны, а хочется более гибкого управления? Ну даже в такой системе на самом деле вы сможете ходить в 8 сторон!
Просто если вы зажмёте кнопки вверх и вправо, то вверх и вправо (Y-, X+) вам персонаж и пойдёт, но иногда нужно больше возможностей.
Иногда нужно сделать движение мышкой или например движение к мышке. Тут могут быть очень разные ситуации, допустим вы делайте стратегию, или же например вам нужно что-бы пули летели туда, куда вы указывайте мышкой.
Либо же например если у вас игра на телефон, то мышка в game maker это будет на самом деле - палец. То есть куда вы тыкайте, то и мышка, если это телефон или планшет. Игры в game maker можно писать не только на компьютер.
Тут уже всё только кодом, да и вообще - дальше всё уже только кодом. Но пугаться кода не следует, не так уж и долго его осваивать. Для примера возьмём мою старую игру, я её делал давным давно. Вот моё короткое видео где вы можете увидеть как такое движение будет выглядеть:
Синий герой тут двигается именно туда, куда вы тыкайте мышкой. Делалась игра на телефон и до сих пор валяется в google play.
Тут был выбор (и я это тоже делал), либо делать контролер как в приставках - то есть небольшую область экрана кругом, через которую вы будете управлять. Либо тупо сделать что герой идёт туда, куда вы тыкайте пальцем (или мышкой).
Я выбрал второй вариант.
Это пишется легко, одной функцией:
Синим я выделали скорость (h_speed), в данном случае она является локальной переменной, но она может быть и глобальной, а можно там просто написать например цифру 5 и не заморачиваться, на данный момент.
false - переводиться как ложь (true - правда, истина).
Это часто используется в програмировании и иногда заменяется на 1 и 0, где 1 - да, а 0 - нет. Это как бы и есть язык программирования, когда вы говорите на языке машины, которая понимает именно так.
В данном случае ложь (false) в этой функции означает проверку стен ну и она отключена. Пока давайте этого не касаться.
mouse_x,mouse_y - это координаты движения (куда вам нужно двигаться), в данном случае мы двигается на координаты мышки.
Абсолютно так-же делается куча других вещей, например пуля летит в прицел (в 2D играх) примерно так-же, если прицел там-же где и мышка или просто картинка мышки (спрайт) это и есть прицел.
Так сделано например в моей игре TDS, для которой я кстати даже исходник выкладывал.
Кстати, скачивать чужие исходники (исходный код) очень полезно для обучения, там вы сразу сможете просто посмотреть что и как сделано.
Теперь к чуть более сложному, если вы еще не устали.
В справке game maker, которой я всем рекомендую пользоваться как можно чаще, есть все функции движения:
Так-же бывает что я использую:
Допустим при создании объекта (create) мы может просто написать в коде hspeed=1, и тогда у него сразу будет скорость 1, он начнёт движение направо.
Иногда нужны и такие вещи.
А вот "speed" нужно довольно часто, так-как с помощью этой штуки можно не просто указывать скорость, её так-же можно еще и проверять.
Например писать:
Если скорость больше 0 (объект не стоит на месте, двигается) тогда... (Делать что-то). Так-же почти во всех функциях движения вы можете просто писать "speed", а при создании этих объектов задавать эту самую скорость в create. Это будет просто локальная переменная и так её проще менять для некоторых ситуаций.
Так-же есть более сложные функции (Motion Planning) и планированием движения и избегания объектов (например стен), но о них мы поговорим в следующей статье. GameMaker позволяет вам планировать движение и даже прописывать не самый плохой искусственный интеллект. Враги могут уворачиваться от пуль, прятаться за укрытиями, отступать и многое другое, но про всё это мы будет говорить далее.
Какие-то азы поведения врагов (слух, зрение) вы можете прочитать в моей статье:
Так-же про это есть видео.
Последнее на сегодня это функция - move_towards_point
Основная функция движения в gamemaker, которой лично я пользуюсь довольно часто, это:
Движение к точке.
Она простая и понятная, в ней есть 3 составляющих.
Синтаксис такой:
X, Y - это понятно, к какой конкретно точке нам двигаться. А SP - это скорость.
Как двигаться не к точке, а к конкретному объекту?
Например, как зомби будет бежать на героя? Вспомните как делается движение к мышке, тут всё почти так-же.
Если объект герой у нас называется - obj_hero
Тогда у нас получается:
Если вы это пишите в create - при создании объекта, тогда он будет идти на героя с этой скоростью, однако, он будет идти в координаты которые герой имел при создании этого объекта (зомби).
Как следствие, преследовать героя и бегать за ним зомби не будет.
Писать эту функцию в create бывает полезно когда движения объекта точно не будет меняться дальше, например для пуль. Пули могут мазать и они летят туда, куда вы целились. Конечно, фантазёры могут придумывать самонаводящиеся пули или например какие-то ракеты с тепловым наведенем, но что-бы объект следовал за целью всегда, эту функцию нужно писать е в create, а в step.
Step (шаг) - выполняется каждый тик. Если FPS = 30, то в секунду у нас будет выполнена эта функция 30 раз. В данном случае 30 раз в секунду будет меняться координаты цели, к которой осуществляется движение.
По хорошему нужно бы мне написать про все эти действия в game maker (draw, create, step), но они довольно просты и скорее всего я не буду покрывать этот момент.
Вот так зомби в моей игре бегают за героем. Точнее не совсем так, у меня там есть еще условия (видимость, слух, агрессивность, избегание препятствий и т.д.), но и так они будут за героем бегать.
На этом на сегодня всё.
Так-как это пробный формат постов, буду рад если вы его поддержите чем можете что-бы я понял что людям такие уроки по GM интересны и полезны. Д
ля этого дайте ссылку на эту статью друзьям, поставьте тут лайк (под статьёй) ну и ставьте лайки и делайте репосты когда я такие статьи публикую в своём паблике. Я вам буду очень признателен (если вы туда еще не вступили, вступайте).
Я планирую сделать про это видео в ближайшее время, так что можете потом посмотреть еще и его на моём канале в YouTube - Econ Dude.
Я так и не успел покрыть смежные темы:
Может быть позже про них тоже напишу.
Ну и сделал по этому теме видео на моём канале (14 мин).
Можете посмотреть:
Не так давно я принял решение сделать серию статей и видео на своём канале в ютуб про создание игр в GameMaker.
Хочу сделать курс для новичков с нуля - основы создания игр. Начну я именно с движения, так-как движение - это база для любой игры и понимать как оно устроенно очень важно при программировании, если вы планируйте изучать геймдев.

Научу как сделать движение персонажа и врагов
Если вы работайте в какой-то другой среде программирования и используйте не гейм мейкер (GameMaker), а например unity, то тут вы тоже сможете найти интересную информацию для себя так-как вне зависимости от среды и движка, принципы везде довольно похожи. Движение это самое просто и самое первое, что люди изучают.
Начнём.
Движение персонажа, союзников, нпс, животных или врагов - это основа практически любой игры, особенно игр в базовых жанрах (аркады и платформеры), с которых и нужно начинать свой путь в освоении создания игр.
В таких программах как game maker (studio, 2 или любом другом) всё это сделать довольно просто и в рамках простейшего объектно ориентированного программирования вы можете сделать движение за пару секунд. Но для начала давайте поймём пару вещей: кто будет двигаться,
Например, обычно нам нужно что-бы враги двигались на героя. да? А герой, часто, двигается при нажатии на стрелки на клавиатуре (или кнопки q, a, s, d), а может быть вам нужно что-бы какой-то кролик рядом просто бегал от дерева к дереву? Начинать думать с таких простых вещей важно так-как потом уже в коде это вам сильно поможет понять что же вы такое пишите и почему писать нужно именно так, а не иначе.
Функции движения в GameMaker
Как сделать движение в игре? Если вы только начинаете освоение game maker, то вы можете для ваших первых игр всё сделать вообще без какого либо кода. Гейм Мейкер был придуман как раз для новичков и он позволяет делать простые игры и осваивать всё даже без программирования.
Дальше, конечно, код вам понадобиться, но начать можно и вот с такого:
Самые первые и базовые функции движения в Гейм Мейкер
Простейший пример, как сделать движение героя при нажатии на стрелку вверх?
Вот и всё.
Добавляем событие (event) - <UP> и на это вешаем действие (action).
Стрелку вверх, указываем что это относиться к себе (к этому объекту - self), ну и ставим галочку - относительно (relative). Последнее означает что движение идёт относительно текущих координат объекта.
В коде это всё можно сделать вот так:
Как видите и в коде всё очень просто, просто мы меняем координату объекта (героя) на 1 по оси Y. Пишем: y-=1
Какие бывают даже тут ошибки?
Почему минус равно (y-=1), а равно минус (y=-1)?
В первом случае мы меняем координату относительно героя, а во втором он сразу прыгнет в координату Y -1, а это будет на 1 пиксель выше чем экран комнаты.
Есть еще один момент, который смущает новичков.
Координаты в GameMaker
Иногда координаты в гейм мейкер могут быть немного непонятными. Возьмём две точки что-бы было понятнее.
Мой условный и схематичный рисунок
- Вверх: Y-
- Вниз: Y+
- Вправо: X+
- Влево: X-
И вот тут иногда бывают непонятки.
Почему вверх, это минус, ведь на других осях таких координат по оси Y больше обычно означает - выше?
Дело в том, что координаты комнат в гейм мейкер строятся от точки 0, 0 (X, Y), которая находится в левом верхнем углу. Соответственно движение вверх будет движение ближе к нулевой точке.
Давайте построим две точки с координатами чтобы лучше это понять.
Точна снизу, x = 400 (на той-же линии по вертикали), у = 125 (По горизонтали)
Теперь представьте что наш герой, или например космический корабль, находится в нижней точке. Какую координату нам нужно изменить чтобы он был выше, Х или У? 400 или 125?
Для движения наверх нам нужно будет вычесть координату У.
Например, если вы напишем У-=100, то объект как раз и переместиться в первую верхнюю точку, хотя это на самом деле даже не совсем движение, а это будет как-бы прыжок или даже телепортация.
Однако если над этим помедитировать, то любое движение это по сути и есть вот такие прыжки, просто очень маленькие и быстро.
Как фильм это куча кадров, так и движение это просто вот такие мелкие шажки/сдвиги по координате во времени. Скорость при этом, как вы знаете из физики, означает какое расстояние за единицу времени пройдёт объект.
Скорость 5 в нашем случае будет означать что за одну единицу времени объект пройдёт 5 клеток (пикселей).
Что такое скорость и время в играх, да и вообще?
Маленькое отступление.
А что такое в GameMaker, да и в играх, вообще время? Мы тут с вами совсем уже в философию даже уходим, но это на самом деле интересно.
Время в играх как и в жизни изменяется, в секундах, минутах и т.д. Однако, есть в трах такая штука как тики. Тик - это единица времени в играх, по сути дела один кадр. Вам станет всё куда более понятно когда я скажу что количество тиков в секунду это означает уже знакомое вам FPS (frames per second - кадры в секунду).
Еще это называется - кадровая частота.
Общемировой стандарт частоты киносъёмки и проекции составляет 24 кадра в секунду. Это значит что просто картинка меняется 24 раза за секунду и мы видим это как поток, однако на самом деле картинки меняется очень быстро и наш мозг просто не успевает их вычленять. Кстати, когда вы снимаете на камеру старый телевизор, то вы видите черные полосы. Знаете про такое? Вот. Чёрные полосы получаются как раз из-за того, что камера снимает быстрее чем кадры меняются в телевизоре.
Ладно, не заморачивайтесь, но это отступление нам тут было нужно.
И если для вас я пишу слишком просто то уж извините, это основы. В первых статьях я буду всё разжёвывать вот так, иначе люди просто не поймут материал.
У меня на канале есть видео где я просто пишу код и делаю игру, без всяких объяснений. Таких видео много, однако после них остаётся куча вопросов, а я хочу создать именно обучающий материал, который эти вопросы исключит.
Понять про кадровую частоту нам было важно так-как в жизни это всего-лишь скорость смены кадров и всё.
А вот в играх так-же самая вещь (FPS), это и есть время!
Сейчас к вам может прийти божественное откровение, если это случилось, поздравляю.
Ну ладно. это не время, FPS - это как-бы скорость течения времени. Я всё еще больше запутал судя по всему...
Представим что наш объект двигается с игровой скоростью 1 (один пиксель за тик), двигается он направо.
Стартует он с координаты 0, 300 (слева, середина экрана 800 на 600).
Сколько пикселей такой объект пройдёт за 3 секунды и на каких координатах он будет?
Вот видите, хрен мы это поймём если мы не знает FPS!
В играх частота смены кадров сейчас порядка 100 и больше, но иногда можно использовать и 30, и 50 и какую угодно. Чем она больше, чем труднее будет для устройства "переваривать-тянуть" игру.
Если у нас FPS = 50, тогда за одну реальную секунду происходит 50 тиков - 50 действий. И если у вас движение идёт со скоростью 1, то за 3 секунды в таком пространстве объект пройдёт 1 * 50 * 3 = 150 пикселей.
И будет он уже не на координате 0, 300, а на координате 150, 300.
Хотя можно было подумать вначале что скорость 1 это медленно, но это в рамках игры и игровой вселенной (если карта-комната размером 800 на 600) будет очень быстро, если FPS у нас 50.
Это всё, кстати, потом нужно будет учитывать при дизайне уровней, балансе и прочих вещах, но об этом позже.
Хорошо, с этим мы вроде разобрались.
Теперь вы можете сделать объект, например героя, который будет двигаться в 4 стороны с нужной вам скоростью и вы сможете им управлять.
С этого обычно многие начинают делать первые игры. О том как создать объект, как нарисовать спрайт и как запустить игру тут я говорить не буду, это либо слишком легко, либо как-то это упомяну в следующих статьях.
Всё это мы можем назвать свободным управляемым движением, однако, что если вам мало ходьбы в 4 стороны, а хочется более гибкого управления? Ну даже в такой системе на самом деле вы сможете ходить в 8 сторон!
Просто если вы зажмёте кнопки вверх и вправо, то вверх и вправо (Y-, X+) вам персонаж и пойдёт, но иногда нужно больше возможностей.
Движение мышкой и движение к мышке
Иногда нужно сделать движение мышкой или например движение к мышке. Тут могут быть очень разные ситуации, допустим вы делайте стратегию, или же например вам нужно что-бы пули летели туда, куда вы указывайте мышкой.
Либо же например если у вас игра на телефон, то мышка в game maker это будет на самом деле - палец. То есть куда вы тыкайте, то и мышка, если это телефон или планшет. Игры в game maker можно писать не только на компьютер.
Тут уже всё только кодом, да и вообще - дальше всё уже только кодом. Но пугаться кода не следует, не так уж и долго его осваивать. Для примера возьмём мою старую игру, я её делал давным давно. Вот моё короткое видео где вы можете увидеть как такое движение будет выглядеть:
Эх, были времена... Больше про эту игру тут
Синий герой тут двигается именно туда, куда вы тыкайте мышкой. Делалась игра на телефон и до сих пор валяется в google play.
Тут был выбор (и я это тоже делал), либо делать контролер как в приставках - то есть небольшую область экрана кругом, через которую вы будете управлять. Либо тупо сделать что герой идёт туда, куда вы тыкайте пальцем (или мышкой).
Я выбрал второй вариант.
Это пишется легко, одной функцией:
Функция:
mp_linear_step(mouse_x,mouse_y,h_speed,false)
Синим я выделали скорость (h_speed), в данном случае она является локальной переменной, но она может быть и глобальной, а можно там просто написать например цифру 5 и не заморачиваться, на данный момент.
false - переводиться как ложь (true - правда, истина).
Это часто используется в програмировании и иногда заменяется на 1 и 0, где 1 - да, а 0 - нет. Это как бы и есть язык программирования, когда вы говорите на языке машины, которая понимает именно так.
В данном случае ложь (false) в этой функции означает проверку стен ну и она отключена. Пока давайте этого не касаться.
mouse_x,mouse_y - это координаты движения (куда вам нужно двигаться), в данном случае мы двигается на координаты мышки.
Абсолютно так-же делается куча других вещей, например пуля летит в прицел (в 2D играх) примерно так-же, если прицел там-же где и мышка или просто картинка мышки (спрайт) это и есть прицел.
Так сделано например в моей игре TDS, для которой я кстати даже исходник выкладывал.
Кстати, скачивать чужие исходники (исходный код) очень полезно для обучения, там вы сразу сможете просто посмотреть что и как сделано.
Основные функции движения в GameMaker
Основные функции движения в GameMaker
Теперь к чуть более сложному, если вы еще не устали.
В справке game maker, которой я всем рекомендую пользоваться как можно чаще, есть все функции движения:
- distance_to_object
- distance_to_point
- motion_add
- motion_set
- move_towards_point
- move_bounce_all
- move_bounce_solid
- move_contact_all
- move_contact_solid
- move_outside_all
- move_outside_solid
- move_random
- move_snap
- place_snapped
- move_wrap
Как вы видите их на самом деле не так уж и мало, однако я пользуюсь чаще только теми, которые я выделил жирным.
Так-же бывает что я использую:
- hspeed - горизонтальная скорость
- vspeed - вертикальная скорость
- speed - скорость
Допустим при создании объекта (create) мы может просто написать в коде hspeed=1, и тогда у него сразу будет скорость 1, он начнёт движение направо.
Иногда нужны и такие вещи.
А вот "speed" нужно довольно часто, так-как с помощью этой штуки можно не просто указывать скорость, её так-же можно еще и проверять.
Например писать:
if speed>0 then ...
Если скорость больше 0 (объект не стоит на месте, двигается) тогда... (Делать что-то). Так-же почти во всех функциях движения вы можете просто писать "speed", а при создании этих объектов задавать эту самую скорость в create. Это будет просто локальная переменная и так её проще менять для некоторых ситуаций.
Так-же есть более сложные функции (Motion Planning) и планированием движения и избегания объектов (например стен), но о них мы поговорим в следующей статье. GameMaker позволяет вам планировать движение и даже прописывать не самый плохой искусственный интеллект. Враги могут уворачиваться от пуль, прятаться за укрытиями, отступать и многое другое, но про всё это мы будет говорить далее.
Какие-то азы поведения врагов (слух, зрение) вы можете прочитать в моей статье:
Так-же про это есть видео.
Последнее на сегодня это функция - move_towards_point
Функция движения к точке в GameMaker
Функция движения к точке в GameMaker
Основная функция движения в gamemaker, которой лично я пользуюсь довольно часто, это:
move_towards_point
Движение к точке.
Она простая и понятная, в ней есть 3 составляющих.
Синтаксис такой:
move_towards_point( x, y, sp );
X, Y - это понятно, к какой конкретно точке нам двигаться. А SP - это скорость.
Как двигаться не к точке, а к конкретному объекту?
Например, как зомби будет бежать на героя? Вспомните как делается движение к мышке, тут всё почти так-же.
Если объект герой у нас называется - obj_hero
Тогда у нас получается:
move_towards_point( obj_hero.x, obj_hero.y, 5 );
Если вы это пишите в create - при создании объекта, тогда он будет идти на героя с этой скоростью, однако, он будет идти в координаты которые герой имел при создании этого объекта (зомби).
Как следствие, преследовать героя и бегать за ним зомби не будет.
Писать эту функцию в create бывает полезно когда движения объекта точно не будет меняться дальше, например для пуль. Пули могут мазать и они летят туда, куда вы целились. Конечно, фантазёры могут придумывать самонаводящиеся пули или например какие-то ракеты с тепловым наведенем, но что-бы объект следовал за целью всегда, эту функцию нужно писать е в create, а в step.
Step (шаг) - выполняется каждый тик. Если FPS = 30, то в секунду у нас будет выполнена эта функция 30 раз. В данном случае 30 раз в секунду будет меняться координаты цели, к которой осуществляется движение.
По хорошему нужно бы мне написать про все эти действия в game maker (draw, create, step), но они довольно просты и скорее всего я не буду покрывать этот момент.
Вот так зомби в моей игре бегают за героем. Точнее не совсем так, у меня там есть еще условия (видимость, слух, агрессивность, избегание препятствий и т.д.), но и так они будут за героем бегать.
На этом на сегодня всё.
Так-как это пробный формат постов, буду рад если вы его поддержите чем можете что-бы я понял что людям такие уроки по GM интересны и полезны. Д
ля этого дайте ссылку на эту статью друзьям, поставьте тут лайк (под статьёй) ну и ставьте лайки и делайте репосты когда я такие статьи публикую в своём паблике. Я вам буду очень признателен (если вы туда еще не вступили, вступайте).
Я планирую сделать про это видео в ближайшее время, так что можете потом посмотреть еще и его на моём канале в YouTube - Econ Dude.
Я так и не успел покрыть смежные темы:
- Планирование пути
- Условия движения и проверка расстояний (distance_to_object)
- Избегание препятствий
- Гравитация
Может быть позже про них тоже напишу.
Ну и сделал по этому теме видео на моём канале (14 мин).
Можете посмотреть:
Основы создания игр - движение в game maker
Ну а другие статьи про создание игр в блоге Econ Dude вы найдёте тут: