Автомобиль на game maker

Game Maker AI — С чего начать?

Game Maker — платформа разработки (в начальной концепции 2D) игр. На данный момент наиболее популярны Game Maker 8.0\8.1 и Game Maker Studio. Последний, к слову, поддерживает кросс-платформенную разработку (что, наверное, и является почти единственным фактором выживания движка в целом).

В последнее время GM теряет свою популярность под тенью таких гигантов, как Unity3D/Cryengine/Unreal. Я считаю потерю спроса на этот движок совершенно необоснованной, ведь для создания многих игр (например, под Android) нет необходимости в последних технологиях разработки 3D и других «ненужных» функциях, очень требовательных к системе пользователя. При использовании Game Maker для разработки таких игр можно достичь достаточно высокой производительности без видимых жертв со стороны графики или функционала.

Итак, ближе к делу. С некоторых пор я занимаюсь разработкой игр в среде GM. И в один прекрасный день передо мной возникла интереснейшая задача — разработать приемлемый AI для игры жанра TDS (Top Down Shooter). Признаться, до того момента я не сталкивался с разработкой искусственного интеллекта, и задача поначалу просто поставила меня в тупик. Три последующих дня я провел в поиске решения (естественно, методом проб и ошибок), и узнал я за эти 3 дня довольно много. На основе своего короткого и болезненного опыта, я постараюсь описать основные методы и сторонние библиотеки по разработке AI в среде Game Maker.

Встроенные средства Game Maker

Несомненно, GM предлагает собственные средства разработки AI (на которых в последствии и строятся сторонние библиотеки). Именно с них я и начал свое путешествие в мир Искусственного Интеллекта. В эти средства входят функции поиска пути, расстояния и угла направления, а также функции проверки столкновений (на мой взгляд, самое полезное из всего вышеперечисленного).
Небольшая классификация функций GM:

Перемещение

Как по мне — очень полезные функции, пусть и далеко не всегда. При их использовании следует учитывать несколько моментов:
Во первых, маску столкновений объекта (параметры устанавливаются в настройках спайта объекта).
Во вторых, категорически не советую использовать данные функции для поиска сложных путей (к примеру, в лабиринте). Как правило, в таких случаях исполнитель «втыкается» в первый же объект и пытается пройти сквозь него.
Данные функции стоит применять при поиске короткого пути на участке без большого количества твердых объектов.

У данной функции есть одно большое преимущество перед предыдущими — если поиск пути завершится неудачей, движения не происходит. Это оградит исполнителя от «втыкания в стену». Минус же собственно в том, что эта функция возвращает готовый путь, который должен пройти исполнитель. Это нельзя однозначно назвать минусом, но, скажем, во время боя использовать пути крайне накладно и неудобно.

Метод базирующийся на сетке — очень мощный инструмент (и используется в основном в профессиональных играх), но он требует, чтобы Вы проделывали всё это, мысля очень осторожно. Вы должны определить, какая область и размер ячейки будет соответствовать оптимальному решению для Вашей игры. Также Вы должны определить, какие объекты должны иметь точную проверку столкновений, это важное значение. Все эти параметры сильно влияют на эффективность метода.

— цитата из справки по GM

И вправду, сетка — очень удобный инструмент при проектировании путей. Она намного более надежна, чем тот же potential_path (поскольку всегда находит путь, если он есть). фыприемов работы с сеткой ушла бы целая статья, поэтому постараюсь ограничиться «минимумом»:

Функция создает сетку и возвращаецов
cellwidth,cellheight — размеры ячейки

После создания сетки стоит добавить запрещенные для прохождения зоны. Я пользовался для этого довольно простой функцией:

Очень удобная функция, поскольку при разработке игр всем «твердым» объектам, через которые нельзя проходить, ставят общий родительский объект. Если указать в вызове данной функции этот объект — все дочерние объекты также будут проверены.

Итак, у нас есть сетка с непроходимыми зонами. Теперь дело за малым — рассчитать путь для нашего исполнителя:

Наш путь готов, если он конечно существует. Минус все тот же — это путь (пусть и более правильный, точный, безотказный путь), и ничего тут не поделаешь.

Первое время мне очень понравился метод сетки, и он имеет право на жизнь, но не в игре моего жанра (в большинстве случаев). В бою этот метод также не применим, как и potential_path. Зато таким образом можно составлять пути для патрулирования вне боя, или, например, поиск игрока после потери из виду.

Определение расстояния и направления

Здесь все довольно просто, за это отвечает всего пара функций:

Конечно, это не единственные функции для работы с расстоянием и направлением, но в большинстве случаев их вполне достаточно. Также в процессе поиска обнаружил любопытный скрипт, определяющий различие между направлениями в градусах (очень полезно при проверке наличия противника в поле зрения исполнителя):

Проверка столкновений

Существует несколько (похожих) функций для определения столкновений объектов друг с другом. Вряд ли их можно использовать для определения пути, зато, скажем, при реализации стрельбы (любого вида стрельбы) они просто незаменимы.

На мой взгляд, данные функции не нуждаются в дополнительном объяснении. Могу лишь сказать, что ими удобно пользоваться при реализации стрельбы, или радара, или некой системы наведения для AI.

Сторонние библиотеки

Наконец-то, встроенные средства GM позади, и можно пуститься в свободное плавание — в мир библиотек. Хотя не все настолько радужно, ибо библиотек для разработки AI не так уж много. Попробую перечислить все, что мне удалось найти.

TDS AI Lib

TDS AI — незамысловатое название для библиотеки, предназначенной для разработки AI в играх жанра TDS. На деле же это просто набор достаточно часто используемых функций, встраиваемых прямо в интерфейс GM.

Функционал TDS AI:

В обращении библиотека достаточно проста (при минимальных знаниях английского разумеется). С помощью данной библиотеки исполнителя можно «научить» таким вещам, как поворот в сторону объекта, следование за объектом, уклонение от объекта (возможно, имеет смысл использовать даже для уклонения от выстрелов), проверка расстояния до объекта и наличие его в поле зрения, а также random-ное перемещение.

На этом и заканчивается функционал библиотеки. Вердикт: удобно, просто в использовании, но недостаточно. Ведь AI — не просто набор функций.
*ссылку на библиотеку можно найти в конце статьи

Читайте также:  Адаптер для диагностики автомобилей kia
Behaviour Tree AI

После TDS AI я наткнулся еще на несколько библиотек и примеров, но ни один из них не заслужил внимания в этой статье. Честно говоря, я был в отчаянии — неужели мне придется самому разрабатывать систему AI (удобную, расширяемую систему)? От подобной мысли веяло ужасом, поскольку у меня не было ровно никакого опыта в разработке искусственного интеллекта.

Но вот случилось чудо, и совершенно случайно я наткнулся на этот шедевр. По началу я не до конца понял его смысл, но мне стало интересно. Я скачал исходник с примером, и после получаса изучения кода я понял, что ко мне попало нечто действительно уникальное. Behaviour Tree — не просто набор полезных функций, это целая система для разработки AI. Именно здесь реализован структурный подход к созданию ИИ, необходимый для удобной работы и расширения.

На описание возможностей BT AI уйдет целая статья. Тем более, такая статья уже есть, ссылку на нее можно найти в конце моей статьи. Исходя из этого, я постараюсь объяснить лишь основы.

Небольшой пример главного скрипта BT AI:

Selector — оператор выбора набора действий
Sequence — набор действий
Condition — проверка условия
Action — действие. вызов скрипта(первый аргумент) с параметрами (остальные аргументы)

Заключение

Напоследок готов повторить, что Behaviour Tree — лучшая моя находка в сфере AI для Game Maker, и я горячо советую ее к использованию. Именно на ней реализован тот самый AI, который мне нужно было сделать.
Глупо будет отрицать, что существует множество других систем для разработки искусственного интеллекта, и многие из них могли просто пройти мимо моего внимания. Буду очень рад ценным дополнениям к моей статье, а также указаниям на мои ошибки, если они есть.

Источник

«Немного» о Game Maker Studio

Доброго времени суток, уважаемые читатели моего бложика! В известном топике уже была задета тема Game Maker и многим она показалась интересной. Потому я хотел бы в свою очередь ее несколько продолжить и дополнить своими мыслями. Так как на момент написания этого текста я еще не придумал какой-нибудь умопомрачительный заголовок для него, на всякий случай сообщу, что это ни в коем случае не будет очередным уроком или чем-либо другим в этом духе (по прежнему считаю, что туториалам тут не место). Так что всем, кто уже знаком с Game Maker Studio и желает познать остальные его тайны, но при сем ленится совершить такое сложное телодвижение, как набор «gamedev.ru» в адресную строку, сейчас придется попотеть… Для остальных же продолжим.

Для начала стоит рассказать о том, что вообще есть такое этот самый Game Maker Studio, ибо, думается мне, обязательно найдутся люди, которые о нем и не знают вовсе. А есть это специальный конструктор игр — программа для быстрой конвейерной сборки (угадайте, чего?) видеоигр. На данный момент Game Maker Studio очень популярен и уже зарекомендовал себя в широких массах, как не только легкий и доступный, но и одновременно довольно мощный инструмент для разработки приложений. Хотя изначально Game Maker и был ориентирован исключительно на машины под управлением Windows, нынче он обзавелся кроссплатформенностью и позволяет писать игрушки как под Маки и Шиндовсы, так и под Андроиды и Айфоны. Спектр доступных платформ, можно сказать, ограничен только вашим желанием вкладывать деньги: изначально пользователю доступна разработка исключительно Windows-приложений, а остальные модули экспорта покупаются за определенную сумму.

В плане интерфейса со времен седьмой версии, с коей у многих новоиспеченных игроделов и начиналось знакомство с данным конструктором, Game Maker ушел далеко вперед. Помимо довольно сомнительного дизайна (который, в принципе, можно поправить в настройках) GMS так же обзавелся рядом других улучшений. Однако так как эта, с позволения сказать, статейка ориентирована в большей степени на людей, которые и в руках-то не держали Game Maker, начну по порядку. Итак, как вы можете узреть на скриншоте ниже, окно Game Maker Studio состоит из главного меню (1), дерева ресурсов (2) и, собственно, рабочей области (3). Надо сказать, рабочая область — отныне вещь весьма условная и даже бесполезная. Если раньше дочерние окна нельзя было выдвинуть за границы главного окна GMS, то теперь эту болезнь пофиксили, а пустая область под эти вот самые дочерние окна так и осталась в качестве напоминания о печальной недоработке. Думаю, в идеале стоило бы довести интерфейс до схожей с Delphi консистенции, но олдфаги вряд ли бы свыклись с такими кардинальными изменениями в дизайне, да и не модно это как-то уже. Но не суть.

Дерево ресурсов представляет собой упорядоченный список всех доступных ресурсов (спасибо, кэп). Наиболее важные из них на начальных этапах: sprites (спрайты), objects (объекты) и rooms (комнаты). Собственно, пару слов о том, как приблизительно происходит в Game Maker Studio процесс разработки игры. Создается спрайт, который, простым языком говоря, представляет собой контейнер, содержащий всякого рода картинки. То есть, коль загружена только одна пикча, то это просто будет статичное изображение. Если же загрузить больше, то, по умолчанию, оно будет проигрываться, как анимация. Далее делается объект, ему обычно присваивается тот или иной спрайт (в дальнейшем, именно спрайт будет по умолчанию отрисовываться по координатам объекта). Также для объекта прописывается определенный набор скриптов по принципу «условие (событие) — действие». То бишь, если мы хотим, чтобы созданный объект сместился влево по нажатию соответствующей клавиши, добавляем событие «Key Left» и для него пишем скрипт x-=1; (изменение координат объекта). Полученный объект размещается в комнате, которая, грубо говоря, является уровнем (локацией) в вашей игре. Примерно по такому принципу и клепаются игрушки на GM. И да, конечно, кроме перечисленных типов ресурсов нам доступна еще куча других:

Собственно, напоследок, говоря об интерфейсах, хотелось бы упомянуть о редакторе комнат (просто язык чешется; об остальных редакторах я нарочно умолчал, ибо бложик бы растянулся до невиданных размеров). Лет пять назад некий экспертный эксперт в своем сравнении Construct с Game Maker не только бездумно осквернил GM своим нубством, вызвав у определенной массы бургуты, но и указал один реальный недостаток: неудобный редактор комнат. Собственно, YoYo Games, видать, прислушались и пофиксили многие проблемы. Несмотря на несколько непривычный интерфейс, я считаю, что вышло у них немножко удобней и понятней известного аналога. Правда, при этом невооруженным глазом видны всякие углы и косяки, что вроде как плохо… Но не особо напрягает 🙁 И, раз уж пошла тема, осмелюсь сказать пару слов по поводу вечного холивара Game Maker vs Construct. Честно говоря, тут все дело привычки. Лично меня просто тошнит от интерфейса Констракта, хотя некоторые видят в этом лишь абсолютное превосходство над GM. Тем не менее, в борьбе за пользовательские сердца и деньги, в конце концов, выиграл, да и выигрывал всегда Game Maker. И тут дело даже не в его мощности, а в качественной рекламе от YoYo Games. Все мы слышали о Hotline Miami или не менее известном Gunpoint, разработанных на Game Maker Studio. Ну а кто-нибудь может назвать хоть одну более-менее популярную игру на Construct? Лично у меня складывается впечатление, что последнее время он вовсе не развивается: ни слуха, ни духа. Хотя, я не отрицаю, что это вполне себе адекватное средство для разработки игр и все мои нарекания, возможно, вызваны тем, что я знаком с Констрактом весьма поверхностно. Ну и буквально строкой о дебаггере в Game Maker Studio. Имеется две его версии: старая и новая. Собственно, новая стоит по умолчанию и, как мне кажется, достаточно удобна и информативна. Ну а о старой версии, наверняка, больше скажет вот это видео:

Читайте также:  Автомобиль передан учреждению в безвозмездное пользование

По поводу возможностей Game Maker Studio. Ни для кого не секрет, что коль для ваших наполеоновских планов чего-либо не хватит, в любой момент можно накалякать, к примеру, dll-ку и спать спокойно. Таким образом, в пик популярности GM7-8 умельцы уже умудрились прикрутить к сему конструктору гибкий физический движок, шейдеры и, вы не поверите, нормальную трехмерную графику: некто даже успешно портировал Ogre3D со всеми доступными возможностями. Однако сейчас я постараюсь обзорно рассказать исключительно о встроенном функционале Game Maker Studio, поскольку, понятное дело, если вы собираетесь использовать данный конструктор, вряд ли вы настроены дополнительно сутками просиживать штаны за самоучителями по C++.

Физика. Долгое время в Game Maker Studio использовался физический движок Box2D. И он был довольно удобен в использовании: всего пара кликов, должная настройка комнаты и все готово. Сейчас же Box2D заменили на LiquidFun, который, ко всему прочему, еще и поддерживает физику элементарных частиц, а также способен имитировать физику жидкостей. Правда, внешне различий между Box2D и LiquidFun пользователь и не найдет: все по-прежнему до смешного просто и удобно, да и интерфейс абсолютно идентичен. В общем, однозначно респект разработчикам. Однако, думаю, стоило бы добавить в будущие версии возможность переключаться между Box2D и LiquidFun. Дело в том, что в критических ситуациях последний начинает жутко тормозить, отчего, ясен пень, FPS махом падает до нуля. Box2D в этом плане постабильней был и редко когда позволял себя уломать на столь низкие показали. Впрочем, возможно, сию проблему уже пофиксили. Встроенной трехмерной физики в Game Maker Studio, естественно, нет.

Анимация. Ну, изначально со спрайтами уже было довольно удобно работать: заметных ограничений не наблюдалось, и при желании можно было сотворить что угодно в рамках разумного. А теперь ко всему прочему разработчики запилили поддержку скелетной анимации из Spine. Насколько оно удобно или же напротив, я пока не оценил, честно говоря: признайте, продвинутая анимация — вещь из числа роскоши для типичного любителя, коему приходится довольствоваться пиксель-артом в стиле NES, дабы хоть как-то уменьшить объем необходимой работы. К тому же при попытке разобраться с этой самой анимацией я наткнулся на ряд багов… Так что пока ставим на этом пункте галочку и ждем-с новую версию, где все пофиксят.

Графика. Возможностей хватает за глаза, и корпеть над картинкой одно удовольствие. Собственно, пару слов как оно работает. По умолчанию, сценки теперь записываются на специальную графическую поверхность (сурфейс), после чего Game Maker и выводит его на экран. Фишка в том, что, помимо основного сурефейса, вы можете создать кучу других, благодаря чему удобно выводить многослойную графику (если вы когда-либо работали в Photoshop, то, думаю, приблизительно поймете, о чем я). К примеру, для создания двухмерного освещения разработчики часто создают новый сурфейс с соответствующим содержанием и накладывают его поверх основного, что позволяет им сэкономить кучу времени и сил. К сожалению, и по сей день не все видеокарты тянут такие изощрения. Потому, используя дополнительные сурфейсы, следует быть предельно осторожным. На случай же вывода более сложной графики в Game Maker Studio доступны шейдеры, которые, стоит сказать, и работают куда быстрей выше названных графических поверхностей. Потому, коль у вас имеются должные знания GLSL, бояться, что видеокарта не потянет, смысла нет. Хотя, надо признать, на некотором железе шейдера все равно работают некорректно. В общем, хоть Game Maker Studio и предоставляет весьма широкий выбор инструментов для написания графона, по неопытности вы все равно можете умудриться сделать так, что ваша игра будет в разы требовательней всяких там Кризисов и Батлфилдов.

Мультимедиа. Знаю, что игры сами по себе относятся к мультимедиа, однако более подходящего заголовка я не нашел. Речь пойдет сейчас о различных плюшках вроде работы с камерой, микрофоном, видеофайлами и т.д. И, увы, в этом плане все очень плохо. Изначально в Game Maker 8 имелась хотя бы функция воспроизведения видеофайлов с вшивым красным крестиком в верхнем углу. Да вот только в силу кроссплатформенности в Game Maker Studio данную возможность пришлось вырезать. Неясно, будет ли в дальнейшем поддержка тех же видеороликов и андроидовской камеры, но вроде как нечто подобное обещали. Однако на данный момент на то и намеков нет.

Звук. Многие, наверное, помнят насколько был примитивен аудиодвижок в Game Maker 8. Однако разработчики в этот раз постарались и запилили новый, более удобный и функциональный движок для работы со звуком. Радуют инструменты для настройки объемного звучания: все по современным стандартам, все круто. Также появилась возможность распределять звук по n-ому числу дорожек, что несказанно удобно на практике. Ну и нельзя оставить без внимания такие плюшки, как пауза воспроизведения, динамичная настройка громкости и т.д. Для закоренелых олдфагов же есть возможность включить старый аудиодвижок. Данная фича окажется крайне полезной, коль вам приспичит портировать свой старый проект на Game Maker Studio.

Читайте также:  Автомобиль на воде своими руками чертежи

Ну а теперь немного о Game Maker Language, ведь большую часть времени в Game Maker Studio вы как раз и проведете в редакторе кода в обнимку с этим скриптовым ЯП (нет, drag-and-drop в GM на месте; просто на деле гораздо удобнее воспользоваться кодом, нежели этой кучей пазлов). Из плюсов, стоит отметить, что у GML имеется весьма свободный синтаксис. То бишь, грубо говоря, никакой дисциплины — пиши как хотишь, что, думаю, приглянется новичкам. Возможностей для скриптинга тоже хватает: базовые операторы и функции на месте. Да еще вдобавок ко всему имеется целая библиотека дополнительного функционала от векторного движения до полноценного поиска путей(A* Pathfinding). В общем, что могло бы занять у вас сотни строк кода и кучу времени, здесь реализуется за пару минут всего одной функцией. Тем не менее, есть у GML и слабые стороны.

Многие опытные кодеры жалуются, мол, «тема ООП совсем не раскрыта», и с ними сложно не согласиться. Наиболее яркий пример: программисты уже привыкли к некой иерархии доступа к определенному объекту и его свойствам… Эх… Совсем не в ту сторону меня понесло. В общем, сделаем вид, что строчек выше не было и начнем с чистого листа. Для начала, вот список свойств объекта, которые относятся непосредственно к «настройкам» спрайта в Game Maker:

— image_index
— image_speed
— image_height
— image_width
— и т.д. Чувствуете? Ну ведь неказисто все и неудобно, коль рассматривать Game Maker, как объектно-ориентированную систему программирования: целый набор переменных с постоянным повторением image. А ведь это только часть свойств, касающихся спрайта объекта. Представляете, какой беспорядок там творится, коль учесть и другие переменные? Куда удобней и понятней было бы, коль внутри объекта существовала отдельная структура «image» (например), где бы и хранились эти самые свойства.

Знаю, что у некоторых сейчас кипят мозги от поступающего бредоподобного потока информации, так что для начала постараюсь наиболее доступно объяснить, что подразумевается под словом «структура». Итак, представим обыкновенный рабочий стол Windows, который естественно засорен кучей бесполезных файлов по работе и картинок с мемами, чтобы можно было в любой момент остроумно пошутить в рамках какого-либо интернет-сообщества. И тут вы делаете две папки: в одну кидаете бесполезные файлы по работе, а в другую — картинки-мемы для ваших будущих шуточек. Естественно теперь взаимодействовать и с теми, и с другими файлами гораздо удобней, поскольку вы их четко структурировали. Примерно такие вот папки и представляют собой структуры, о которых идет речь.

Чем это удобней в плане кодинга? К примеру, представим ситуацию, когда нам необходимо изменить значение около пяти переменных, касающихся непосредственно картинки. И делать нам это придется вот как-то так:

image_index=…; image_speed=…; image_height=…; image_width=….; image_angle=…; А вот коль внутри объекта была бы структура «image» количество рутины можно было бы сократить до минимума, вычеркнув постоянное повторение одно и того же слова:

with image Думаю, разница очевидна: код уже красивей, чище и понятней. Тем не менее, сложно это все назвать серьезным минусом, поскольку новички какого-либо дискомфорта не ощутят, да и более-менее опытные программисты вряд ли столкнутся с такой ситуацией, когда отсутствие структур критично бы повлияло на количество кода. Однако все равно выглядит это довольно некрасиво.

Заранее предвещаю вопрос: «Хей! Я только что сделал свою игру, могу ли я как-нибудь ее монетизировать?» Постараюсь поверхностно на него ответить. Если вы действительно склепали качественный проект, то имеет смысл податься на Desura. Данный сервис представляет собой некий аналог Steam, но рангом ниже. Отличительная черта Desura в том, что попасть туда довольно просто. Значительный минус — унести оттуда денег куда сложней. Если же вы сделали что-то с чем-то, но-таки желаете с этого получать деньги, можно погуглить MyPlayCity. Хотя тут и приветствуются в основном офисные игрушки или очередные поделки на тему «три в ряд», для вашей скромненькой игрулины, думаю, тоже найдется место. Остальные способы заработка, а также прочие нюансы лучше уяснять непосредственно на форумах по разработке игр.

Скачать Game Maker Studio вы можете с официального сайта YoYo Games. Лично я предпочитаю текущую Early Access версию, однако вы можете взять себе стабильную 1.3: разницу поначалу вы вряд ли заметите. После установки вы, скорей всего, с горестью обнаружите, что вам доступна только Free версия. Однако не стоит бояться — достаточно всего-то указать в нужном месте свой e-mail и абсолютно бесплатно получить ключ для Standard. С вашего позволения, я не буду сносить настройки программы, дабы тыкнуть пальцем на скриншоте, где это «нужное место» находится. Также вы можете приобрести Game Maker Studio: Standard в Steam. В отличии от бесплатной лицензии, в нем вам будет доступен порт на Маки, а также вырезан назойливый сплеш-экран, гласящий о том, что игра сделана на проге от YoYo Games. Но, опять же, лично я считаю, что этого делать не стоит: политика разработчика касательно Steam мне кардинальным образом непонятна, так что и неизвестно, чего стоит ждать от честно купленной GMS в королевстве Гейба.

А на этом я, наконец-то, заканчиваю излияние буковок в редактор Word. Сразу хочу сказать, что некоторые вещи я мог действительно забыть упомянуть: Game Maker, на самом деле, куда более обширен в плане возможностей, чем может показаться на первый взгляд. Так что заранее извиняюсь, коль вы вспомнили о той самой забытой вещи/вещах. Также извиняюсь за возможные грамматические ошибки или же просто неточности по ходу повествования — что-то меня совсем расперло на буковки и местами я мог запутаться… Ну и, выражаю надежду, что сей материал окажется хоть для кого-нибудь интересным и не потонет в своей бесполезности. Аминь.

Источник

Ответы на популярные вопросы