Как научиться разрабатывать игры. Создание игр для начинающих. Игровая физика и анимация
В этом руководстве подробно разбирается как создать игру: проработать идею, выбрать инструментарий и организовать процесс разработки так, чтобы он протекал легко и привёл к результату.
Привет, ребята. В этой статье буду с вами предельно честен и расскажу как создать игру самостоятельно. Заранее предупреждаю, что сделать видео-игру сложно и очень затратно в плане времени. И если ваша цель не очередной клон змейки, тетриса или любой другой игры из пошагового туториала,- придется вложить в это много сил.
Слишком много людей, стремясь сделать свою первую игру, с головой погружались в движок и забрасывали идею, так как это «слишком сложно», «я устал», «я не вижу прогресса». На самом деле – это просто набор глупых оправданий, которые появляются из-за «сбитого прицела», то есть желания сразу делать игры крупного калибра, вроде Ведьмака или Final Fantasy.
Это проекты, над которыми работали целые команды специалистов, команды из сотен человек, на протяжении нескольких лет, так что, даже если вы очень захотите и потратите всю свою жизнь, сделать такой же масштабный продукт у вас не получится.
Ваша первая игра – это тренировка, черновик, но никак не шедевр. Даже создание одного уровня простейшей пиксельной игры может оказаться неподъёмной задачей поначалу, а выбрав нечто огромное – вы просто не будете иметь представления о том, где же начало, поэтому потратите массу времени на детали, абсолютно значения не имеющие.
Главная задача состоит в создании продукта, в который вы сами сможете поиграть. Плевать, если это линейный платформер, выполненный в двух цветах, и его прохождение занимает 7 минут. Вы его сделали, вы не пали духом, не решили всё бросить, что уже делает вас лучше, вы не из тех кто отчаялся и опустил руки!
Дайте маме, брату, друзьям, кому-угодно в неё сыграть. Они будут критиковать, ведь привыкли воспринимать игры как массивные проекты. Не обращайте внимания, ведь, во-первых: вы сами создали свою первую игру, во-вторых: в следующий раз вы сделаете её быстрее и лучше, и, в-третьих, скоро вы добьётесь того уровня мастерства, что все они сами будут просить вас дать им поиграть.
Ваша игра должна отражать ваши навыки. Всё нужно делать последовательно: появилась идея – проверяете возможность её реализации – если возможности нет, пытаетесь научиться – получив навык, реализовываете идею. И так нужно делать каждый раз. Со временем, загляните в Asset Store, возможно там уже есть фрагмент, над которым вы горбатитесь несколько суток.
Напоследок – что-то вроде напутствия: скорее всего, вы пытаетесь заниматься разработкой параллельно учёбе или работе. Иногда будут проходить недели, прежде чем вы сможете найти время, но, если вы действительно хотите стать успешным в данной сфере – находите эти часы и увеличивайте количество своих навыков. Помните, каждый может опустить руки, но не всем дано дойти до конца.
Сегодня интернет переполнен различными туториалами, обучающими видео и бесплатным программным обеспечением. Всё это позволяет любому, у кого есть много свободного времени и идея, создать собственную компьютерную игру. Однако, необходимо также иметь чёткое представление о самом процессе и его последовательности.
Какую игру сделать?
Скорее всего у человека, интересующегося «Как сделать игру самому?» уже есть идея. Чаще всего это какая-то модификация одной из игр, в которую он играл. Может быть вашей любимой игре чего-то не достает и вы решили это добавить (задумайтесь есть ли у вашей игры возможности для моддинга: встроенный редактор или MOD-tool).
Например, жанр MOBA-игр был создан в редакторе WarCraft 3 (популярная ныне Dota — появилась именно благодаря широким возможностям редактора).
В любом случае — начальной точкой будет идея. Именно с нее и следует начать.
Идея
Но на всякий случай, если вы раздумываете «Какую игру сделать?» — статья поможет вам с поиском идеи.
Геймплейная составляющая идеи вашей игры определит жанр игры и платформу.
Жанр и платформа будущей игры
Выбирая жанр, учтите, что начать следует с чего-то короткого и простого. Первый блин чаще всего бывает комом, но если вы сможете испечь этот блин — ваши разработческие мускулы укрепятся и вы сможете сделать что-то большее в следующий раз.
Затем определитесь с платформой. Это невероятно важно, ведь от платформы зависят возможности геймплея. Например, делать динамичный шутер, где точность выстрела зависит от реакции и ориентироваться на мобильные устройства с тач-скрином не очень хорошая идея.
Концепт
После того как у вас появились какие-то мысли — сядьте и опишите концепцию игры. Сначала это могут быть лишь тезисы, которые потом превратятся в логично изложенные мысли. Если же сделать это не удалось – пересмотрите свою идею и избавьтесь от противоречий.
Определите то, что должно привлекать потенциальных игроков, то есть саму её философию. Например, предложите стать единоличным правителем маленькой островной страны, или же руководить истребителем прямо из кабины пилота, своевременно переключая необходимые тумблеры.
Теперь к особенностям вашей игры. Скорее всего, масса экспериментаторов уже пробовали себя в вашем жанре, но всё равно нужно придумать что-то своё, иначе интерес к проекту будет отсутствовать. Вот небольшой пример:
Пример
Концепт
: симулятор маленького магазина.
Особенность
: вы лично договариваетесь с поставщиками, привлекаете новых клиентов и отчаянно пытаетесь выжить в суровых реалиях.
Объясняете какие факторы влияют на успех, а также говорите о ключевых особенностях игровой механики.
Не пытайтесь добавить пункты, которые вы не хотите реализовывать. Ваша игра должна быть тем, за что вы бы сами хотели заплатить.
Последний этап – положите все черновики в папочку, а затем и в ящик стола. Спустя пару недель вернитесь к ним, так как, возможно, вы потеряете и желание, и запал, а этот через этот этап лучше пройти ещё до начала проекта, чем бросить всё в наполовину готовом состоянии.
План разработки

Чёткий план разработки – надёжная основа вашего проекта и надёжная основа вашего роста как разработчика игр
Данный план будет скелетом вашей игры, поэтому здесь вы должны упомянуть о каждой детали, каждом микро-моменте, обо всём, что считаете важным. Те, кто делает игры в одиночку, могут обходиться без планов (при условии большого опыта), но если под вашим началом команда или опыта не так много, то всё должно фиксироваться.
Чётким расписанием того, когда начинать программировать или рисовать самый первый арт, можете владеть исключительно вы, поэтому делюсь с вами общими моментами, нарушение которых, может отбросить на несколько недель назад, или же вовсе заставить отказаться от идеи создания своей первой игры.
- Ваш план должен быть рассчитан на месяц, не более. Так что доверьтесь своей интуиции и начните с простого. Лучше закончить раньше, чем не уложиться в сроки.
- Как только вы поняли, что данный продукт не может вас ничему научить, ставьте его на полку и забывайте. Вы сможете проверить свои навыки, начав аналогичный проект с чистого листа.
- Даже самые лучшие разработчики стремятся стать ещё круче, так что, каждая новая игра должна начинаться с мысли «Я сделаю лучше, чем в прошлый раз».
- Не игнорируйте планирование. В разработке любого проекта случаются небольшие «форс-мажоры», и предугадать их практически невозможно, поэтому проще банально учесть затраты времени на их устранение в расписании. Запланировали 8 часов? Смело превращайте их в 12.
- Дизайн – одна из последних вещей о которых стоит думать начинающему разработчику игр. Ваша задача – «обрастать навыками», так что лучше потратьте выходные на внедрение нескольких новых механик (незнакомых вам прежде), чем на рисование.
- Разбейте свой план на несколько фрагментов. Достижение этих «контрольных точек» неплохо повышает мотивацию. Если вы не успеваете выполнять недельные требования – упростите общий план.
- Не ставьте себе слишком абстрактных задач. Вместо «Проработать персонажа», вписывайте «внедрить новые механики стрельбы» или «изменить внешний вид во время удара» — чётких целей достичь гораздо проще.
- Присылайте себе письма не электронную почту каждый понедельник. Они должны содержать всё действия, совершённые за прошлую неделю. Сравнив все письма за месяц, вы наглядно сможете увидеть прогресс.
- Тратьте как минимум час в неделю на то, чтобы играть в свой продукт. В конечном счёте, никто лучше вас не сделает ВАШУ игры.
- Проведя две недели без работы над проектом, вы будете растеряны и потеряете нить, что заставит начать всё сначала. Именно на этом моменте большинство людей опускают руки и забрасывают идею создания собственной игры.
- Убивать время на звук и создания атмосферы в своей ей первой же игре – невероятно бессмысленно. Главное: разработать геймплей, ведь существуют шедевры, состоящие из обычных движущихся пикселей.
- Если вы делаете что-то более часа, и у вас всё равно не выходит – обратитесь за помощью. Зачем неделю топтаться на месте из-за того, что вы постеснялись создать тему на форуме?
- Давайте другим попробовать вашу игру. Да, сразу же польётся критика, но не стоит обращать на неё внимания. Даже проекты ведущих студий часто поливают грязью, но это же не мешает им продолжать делать шедевры, верно?
- Вы не обладаете безграничными ресурсами – поэтому нужно ставить перед собой реальные, достижимые цели.
- Как только вы отполировали свою первую игру, сразу же найдите несколько новых идей и беритесь за свежий проект. Не забывайте применять то, чему вы научились раньше.
- Ознакомьтесь с .
Переходим к созданию оглавления. Как ни странно, сюжет здесь практически полностью игнорируется. Главное – прописать все аспекты игровой механики и объяснить принцип их работы. В основном, именно оглавление лежит в основе руководства к игре.
Теперь мы дополняем каждый тезис оглавления детальным описанием каждой мелочи, причём делаем это максимально понятно, иначе могут возникнуть проблемы с реализацией.
Наконец, нужно показать свой план всем, кого вы собираетесь задействовать в разработке. Возможно, реализовать идеи некоторые не выйдет, или же вам предложат более комфортабельные альтернативы. Получив чёткое представление о своей части работы, опытный специалист сразу же сделает несколько замечаний.
Выбор инструментария разработки

Движок – сердце вашей игры, подойдите к выбору ответственно, ознакомьтесь со статьей
Новичку будет проще взять готовый движок, чем разрабатывать собственный.
Каждый движок имеет свои особенности. Некоторые заставят вас изучать программирование, а в некоторых - даже не нужно отличать процедуру от функции, в них существуют средства визуального программирования.
Если давать крайне широкую классификацию, то движки можно поделить на два вида: для двухмерных проектов (GameMaker: Studio, RPG Maker XV) и для трёхмерных игр (Unity, Unreal Development Kit и Source)
Посмотрите несколько официальных видео-уроков и попробуйте сделать в движке что-то самостоятельно. Если данная задача показалась вам неподъёмной, попробуйте скооперироваться с программистом, некоторые ребята могут вдохновиться вашей идеей и помочь в её доработке.
Прототип
Следующий этап – тестовая версия. Здесь не имеют значения звук и графика, главное, чтобы все функции работали именно так, как вы задумывали. Кстати, запаситесь терпением, ведь вы должны будете вносить правки до тех пор, пока не начнёте получать удовольствие от игрового процесса.
Также, будьте готовы к потребности создания готового прототипа с нуля. Тут же вы калибруете управление: он должно быть максимально удобным и интуитивным. В обратном случае – игрок разочаровано пойдёт искать кнопку выхода.
Эта фаза — шлифовка дизайна вашего геймплея. Фаза поиска и проб разных вариантов.
Графика и звук
Сразу решите, какой спектр цветов вам нужен. Если это простой двухмерный платформер, где всё кишит пикселями, то смысла нанимать оркестр и целую команду графических дизайнеров – пустая трата времени и денег. В то же время, не стоит экономить на ресурсах, если они действительно необходимы для полноценного выражения вашей идеи. Не стесняйтесь комбинировать чужие идеи. Единственный запрет – нарушение авторских прав.
Здесь же нужно набросать черновые арты. Кстати, уметь рисовать совсем не обязательно, ведь большинство инди-проектов используют пиксель арт, ввиду его простоты и популярности. Если же вы всё-таки решились на трёхмерный проект, то для создания сложных моделей персонажей придётся нанимать профессионалов.
Наконец, создайте несколько фрагментов игровой вселенной. Это концепты того, как выглядит уровень, или же как персонажи взаимодействуют вне игрового процесса. Пришла пора воплощать ваши идеи в жизнь!
Blender – простой и бесплатный редактор для создания трёхмерных моделей.
Photoshop незаменим для обработки двухмерных изображений, а также отлично справляется с текстурами.
net позволяет быстро создать пиксель-арт.
Звуки, наравне с графикой, создают ощущение атмосферности в вашей игре. К вашим услугам огромный набор готовых библиотек звуков для бесплатных программ, а недостающие мелодии можно записать и дома, главное - обзавестись микрофоном.
Доработка
Играйте в то, что вы создали, причём как можно чаще. Так вы сможете заметить все шероховатости. Усвойте одно правило – или доработайте элемент до идеального состояния, или удалите его. Например, если геймплей уровня кажется вам слишком монотонным, попробуйте сделать его разнообразнее.
Постоянно сверяйтесь с философией игры, чтобы избежать момента, когда проект превращается в кипу несвязных уровней и персонажей.
Отшлифуйте графику и звук – процесс весьма трудоёмкий, но именно от него зависит атмосферность.
Фаза тестирования
Получив предварительную версию игры (не путайте с прототипом), переходите к поиску багов и ошибок. Будет лучше, если их найдёте вы, а не потенциальные игроки в первый же день после релиза.
Делайте акцент на моменты, которые несвойственны вашему стилю игры. К примеру, заходите в части карты, которые не задействованы во время основного геймплея. Тестирование иногда занимает больше времени, чем сама разработка, а его скорость зависит от количества и профессионализма тестеров.
Если же багов невероятное множество, сперва исправляйте наиболее масштабные. Поэтому начинайте их поиск как можно раньше – так будет больше времени на внесение правок. Кроме того, предложите поиграть друзьями и знакомым. Взгляд со стороны позволит заметить множество нюансов, о которых вы сами бы никогда не догадались. К тому же – это абсолютно бесплатно.
Релиз
Организуйте промо-кампанию: подогревайте интерес в социальных сетях, закажите обзоры игровым блоггерам, не забудьте и о сайте с форумом, ведь поклонникам нужно будет где-то собираться!
Выберите платформу для распространения. Вряд ли вы захотите сразу вкладываться в хостинги или выделенные сервера, поэтому обратите внимание на популярные площадки вроде Steam, GOG, Humble, Play Market и им подобные. Помните, что владельцы взымают определённый процент от стоимости, поэтому данный вопрос требует детального изучения.
Не забывайте о поддержке игры даже после релиза. Продолжайте фиксить баги, выпускать дополнительный контент или же сразу приступайте к сиквелу!
В статье всё изложено весьма тезисно, но при этом даётся общее представление о полном цикле выпуска игры. Не стоит стразу рассчитывать на миллионы долларов заработка, ведь игры – это, в первую очередь творчество.
Многие могут в вас не верить. Чего уж там: наверняка, будет пара вечеров, когда вы будете хотеть всё забросить, но не стоит опускать руки. Помните: действительно хороший продукт требует массу времени, средств и ваших нервов.
P.S.
Если у вас возникли какие-то вопросы или нужна помощь — пишите в раздел форума , мне приходят уведомления — я всегда отвечу и помогу чем смогу.
С каждым днем игры становятся все сложнее и навороченнее. Ежегодно в Steam они публикуются тысячами. Они распределяются по разным платформам и категориям. Аудитория игроков стремительно растет. Число разработчиков так же стремительно увеличивается. Быть инди, а точнее соло-разработчиком игр стало тяжело. Но романтика независимости заставляет снова и снова начинать разработку инди-игры. В статье мы поговорим, как выжить на этом пути и как разрабатывать классные игры в жестких условиях конкуренции.
Хотя появляются новые технологии для создания игр, с каждым годом их разработка становится все сложнее и сложнее. Есть тройка топовых движков: Unity, Unreal Engine 4, CryEngine 5. О них постоянно говорят, и их используют для разработки самых разных проектов самые разные разработчики. Тем не менее сложность этих инструментов перевалила мыслимый рубеж. Они огромны, их функциональность достигла вселенских масштабов. Все эти возможности могут быть использованы большими студиями, но для соло-разработчика это избыточный стафф, он ему не нужен, поскольку для его реализации нужны дополнительные ресурсы, которых у инди и так нет (для разработки игры мечты он свой дом заложил). И если это не AAA-игра, то реализация этих фич бесполезна.
Приступая к созданию инди-игры, надо рассчитать бюджет примерно на год вперед и накопить достаточную сумму для разработки игры своей мечты. Начинать лучше, еще работая на обычной офисной работе. Выбрав тему для игры, написать диздок. Необходимо даже создавать прототипы, показывая GIF-анимации интернет-сообществу. И только когда очередной прототип получит общественное одобрение, можно начинать полноценную разработку.
Альтернативные движки
Я понимаю, что в настоящее время существуют инди-игры всех жанров на любой вкус (и это на самом деле хорошо), но мы под инди-играми в данном контексте подразумеваем маленькие, двумерные, ориентированные на мобильные устройства, созданные соло-разработчиком творения (которых преобладающее большинство), поэтому использовать Unity, UE4 для создания прототипов будет неоправданно сложно. Существует широкий выбор альтернативных движков, они проще в использовании и позволяют достигать впечатляющих результатов за меньший срок, минус спецэффекты, которые инди бы все равно не стал помещать в свою игру. Порой для создания полноценной игры под все платформы эти движки не требуют написания кода. Особенно меня продвинуло на тему альтернативных движков после участия в московской конференции разработчиков видеоигр White Nights 2017, прошедшей в октябре. Я подходил к инди-разработчикам, демонстрирующим свои проекты, и расспрашивал об используемом инструментарии. Во многих случаях они называли вовсе не Unity, а Construct 2 или GameMaker Studio .
Оба продукта представляют собой конструкторы двумерных игр, не требующие умения программировать (!). В Construct 2 игру создаешь, определяя игровые события и реакцию на них. Итоговые игры портируются под все распространенные платформы. Прога идет с подробной документацией, большим количеством примеров и теймплейтов, так что освоить ее несложно. Покупать советую в Steam, там ее стоимость за персональную версию составляет 6399 рублей.
Как самому создать игру. Construct 2 с открытым проектом
GameMaker Studio представляет собой популярный конструктор игр с двумя возможностями построения игры (подобно UE4): первая - методом drag and drop, вторая - писать код на собственном языке системы. В зависимости от целевой платформы игры, созданные с помощью GameMaker Studio, визуализируются с помощью OpenGL или DirectX с использованием соответствующих шейдерных технологий. Для обработки физики есть поддержка движка Box2D. Поддерживается широкий ряд устройств ввода. Десктопная версия в Steam стоит 1599 рублей, экспортеры для других платформ надо докупать: так, экспортер для web стоит 2579 рублей, для UWP - 6396 и столько же для мобильных систем.
Как создать игру самому. GameMaker Studio
Третий заслуживающий внимания альтернативный движок - AppGameKit . В отличие от двух предыдущих, разрабатывая с его помощью игры, надо писать код на скриптовом языке. Во многом благодаря этому он меня заинтересовал больше остальных. Стоимость этого движка в Steam составляет 2059 рублей, включая экспортеры под все поддерживаемые платформы. Хорошее вложение. За более подробным описанием архитектурной составляющей движка отсылаю тебя к упомянутой статье.
Раньше я надменно смотрел на эти тулзы, но теперь вижу в них силу, которая может сравниться с топовыми движками. Настало время обратить на них внимание и взять в комплект игродела.
Где взять арт и прочий стафф?
В случае если ты программист и плоховато рисуешь/моделишь самостоятельно, весь необходимый для прототипа стафф можно купить в сторах топовых и альтернативных движков (например). Арт, звуки, шейдеры и другой стафф также можно найти в Steam. Они стоят не так дорого. Изображений в одном комплекте может быть несколько тысяч, но все они для разных игр, поэтому на прототип тебе их, может быть, и хватит, а вот для полноценного релиза - вряд ли. И тогда, возможно, ты найдешь свободных художников, на которых произведет впечатление твоя игра. И это правильно, ведь, работая с покупным артом, ты вынужден подгонять свой сюжет под имеющийся арт, а не наоборот.
Разработка игры с помощью AGK
Мой выбор пал на AGK по трем причинам:
- разработка игр основывается на написании кода двух уровней (Tier 1, 2); мне, как программисту, легче освоиться в новом API, нежели в новом интерфейсе редактора;
- цена демократична;
- купил я этот движок еще два года назад, все обновления приходят сразу же, как появляются.
Дополнительные фишки: AGK поддерживает множество типов контроллеров, так, кроме геймпадов, он поддерживает контроллер бесконтактного управления Leap Motion. Плюс в AGK включена поддержка VR.
Visual Editor
После запуска AGK мы видим только редактор кода без каких-либо визуальных средств, которыми богаты другие движки. Однако в августе компания The Games Creator выпустила приложение, своего рода аддон для AGK - тулзу Visual Editor. Он покупается отдельно (стоит 899 рублей). Этот редактор позволяет визуально настраивать наполнение сцены и уровня твоей игры, импортировать изображения и 3D-модели, помещать их в сцену как игровые объекты, настраивать положение, размер, угол поворота, цвет и другие свойства с помощью инспектора объектов. Как выглядят сцены на устройствах с экраном разного расширения, можно увидеть, прямо не выходя из редактора. В конце концов, сцену можно сохранить и подключить к AGK. Тот спокойно выполнит код, как будто этот файл создан здесь же. Visual Editor дает возможность строить игры методом drag & drop (не полностью, но частично), подобно другим конструкторам, рассмотренным выше. Но, признаться, это не наш выбор.
Игра может состоять из нескольких сцен (например, главное меню, игровое поле, экран победы, экран поражения), и все они могут настраиваться в редакторе. Могут быть использованы текстовые поля, точки привязки, создание анимации и прочее.
Как создать игру. Visual Editor
Классические танки
Движок AGK одинаково хорошо подходит для создания 2D- и 3D-игр. Мы остановимся на 2D по понятным причинам: популярность на мобильных - целевых платформах - одна из них.
Мы испробуем AGK на танках, попробуем воссоздать «классические танки» с игровой консоли NES от 1985 года с новой графикой. Кто не в теме, та игра называется Battle City, во многом именно она послужила прототипом для современных игр про танковые войны (World of Tanks, «Танки Онлайн»). Поэтому наш мир также будет двумерным с обзором сверху.
Основы AGK
Разработку мы будем вести на ярусе №1 (Tier 1) - скриптовом языке, похожем на модернизированный для нужд игродела BASIC. Первое, что необходимо помнить о BASIC, - это то, что в конце инструкции не надо ставить точку с запятой. Расслабься и получай удовольствие: никаких указателей и низкоуровневых приблуд, классов тоже нет. Их роли выполняют структуры. Можно создать экземпляр структуры, который закрепляется за числовой константой. В будущем для обращения к этому экземпляру используется закрепленное за ним число. При выполнении функции, чтобы указать, над каким объектом производится операция, надо передать соответствующее число в первом параметре. По сути, в AGK имеется только три типа данных: integer, real, string. По большому счету это все, что необходимо знать перед началом кодирования игр на AGK.
Приступаем к кодированию
Мы не будем использовать Visual Editor, напишем весь код самостоятельно (см. пример в материалах к статье). Я не буду приводить в статье листинги игры, поскольку ты всегда можешь их найти в материалах. Я лишь напишу краткие инструкции по выполняемому коду.
Создадим в AGK новый проект и начнем кодировать. Сначала инициализируем окно вывода: зададим заголовок окна, установим его размер, укажем способность менять размер. Затем установим разрешение, возможную ориентацию устройства, частоту перерисовки, зададим использование всей области экрана, последним действием инициализации включим использование продвинутых векторных шрифтов вместо растровых. Этот код входит в шаблон проекта. Ниже находится основной цикл игры: do … loop. В нем выводится FPS и происходит перерисовка экрана.
После инициализации игры определяется тип данных для танка, неважно, вражеский он или наш, все поля одинаковые. Объявление типа начинается с ключевого слова Type, за ним следует идентификатор типа, в нашем случае TTank. В первую очередь каждому танку нужны координаты. В AGK объявление происходит таким образом: x as float. Заметь, на конце точка с запятой не ставится. Второй способ объявления переменных - это просто описать их. Например, переменную типа Integer можно объявить так:
x = 4 , real : x # = 4.4, string: x$ = "four" |
То есть добавляется символ после идентификатора. У типа string для задания строки равноценно можно использовать одинарные или двойные кавычки, главное, чтобы закрывающая была парной для открывающей. Далее задаем идентификаторы для спрайта, для коллизии, для флага определения, чьей стороне принадлежит танк: игрока или ИИ. Скорость, частота стрельбы, количество жизней, флаг поверженности, таймер, измеряющий количество секунд, когда танк стал поверженным, флаг, устанавливающийся, когда танк достиг препятствия (нужен для ИИ), в поворотах танка участвуют две переменные: флаг, устанавливаемый в начале поворота, и номер стороны поворота (нужны для ИИ). Заканчивается определение типа ключевым словом EndType.
Затем объявим тип для объекта снаряда. Ему нужны: координаты местоположения, координаты места назначения, идентификатор для спрайта, флаг активности, флаг принадлежности и скорость.
Создадим два массива: один - для танков, второй - для снарядов. Примерно так: Dim tanks as player. Аналогично и со вторым.
Теперь нам надо загрузить текстуры. Это делается с помощью функции LoadImage, первым параметром передается номер, за которым будет закреплено изображения, а вторым - путь и имя файла. Все игровые ресурсы загружаются из подпапки media папки с игрой. Папка media создается при первой удачной компиляции. Таким же образом загружаем изображение снаряда. В цикле создадим все снаряды. Описание цикла начинается с For makebullets = 1 to 20, а заканчивается инкрементом циклической переменной: Next makebullets. В теле цикла происходит создание спрайта (CreateSprite с параметрами: идентификатор спрайта, номер натягиваемой на спрайт текстуры), установка его позиции (SetSpritePosition), установка слоя глубины (SetSpriteDepth), смещение начала координат для спрайта (SetSpriteOffset).
После этого мы сбрасываем значения всех параметров танков к значениям по умолчанию, это делается нашей функцией resetplayers. Из нее вызывается функция CreateTank. В качестве параметров она получает: номер танка (индекс в массиве танков), координаты, коэффициенты цветов, угол поворота, принадлежность к игроку или ИИ. CreateTank занимается созданием танка, определяет положение, скорость перемещения, частоту стрельбы, угол поворота. Также она создает для танка спрайты, настраивает их цвета, номера слоев. Далее загрузим текстуру фона и создадим для него спрайт, плюс нам понадобится текстура для препятствия. Зададим тип для препятствия - bricks. Он будет содержать только два поля: номер спрайта и активность. Положение задается при создании в расположенном ниже цикле.
Для игры нам надо загрузить два звука: выстрел и попадание. Это выполняется функцией LoadSound, она принимает цифровой идентификатор и имя файла. На десктопе AGK может работать с тремя форматами аудио: WAV, MP3, Ogg, а на мобильных с двумя, исключая MP3, из-за того, что этот формат не свободный. Создаем несколько глобальных переменных: текущее время, номер текущего уровня. Вызываем функцию для создания уровня. Весь код находится в глобальном пространстве и будет выполнен при запуске игры.
Далее мы погружаемся в центральный цикл нашей игры, тело которого выполняется 30 раз в секунду (зависит от частоты смены кадров, на PC может быть 60). Здесь первым делом нам надо получить количество миллисекунд (GetMilliseconds), прошедших с момента запуска игры. Затем запускаем цикл по всем игровым объектам - танкам. Если танк не вращается, он не подбит и им можно управлять (для этого вызываем функцию controlplayer), с другой стороны, увеличиваем его угол поворота. Поворачиваем определенный танк в направлении вектора его движения. Если танк вращается более двух секунд и у него закончились жизни, сбрасываем его состояние (resetplayers). Далее обновляются позиции всех снарядов в функции movefire и идет проверка на подрыв любого танка - в tankhit. Она возвращает номер подбитого танка, который начинает вращаться вокруг своей оси, вдобавок проигрывается звук попадания снаряда. Последней вызывается функция обновления экрана.
В остальном коде программы описаны используемые функции. Они представляют самую интересную часть - «живые» алгоритмы поведения игры.
Функция controlplayer, в которую передается номер определенного танка, реагирует на ввод юзера, производя соответствующие действия. Каждой клавише соответствует свой номер в системе ASCII, поэтому сначала нам надо объявить соответствующие клавишам константы:
#constant KEY_LEFT 37 #constant KEY_UP 38 #constant KEY_RIGHT 39 #constant KEY_SPACE 32 |
Когда игрок нажимает клавишу «Вверх», переменная Forward принимает значение 1, когда «Вправо» - переменная turn принимает 1, «Влево» - она же -1. При нажатии пробела, если танк не вращается, происходит выстрел (вызов функции makefire с передачей номера танка), с учетом того, что танк может выстрелить с интервалом в 500 миллисекунд.
Далее займемся управлением танками ИИ. Если танк противника находится на обозримом расстоянии, наш незамысловатый ИИ просто преследует танк игрока. Приближаясь к цели, он стреляет. Поэтому первым делом надо найти угол между танками. Это выполняется с помощью функции FindAngle. Ей передаются координаты первого и второго объектов. Если второй танк ниже первого, тогда переменная turn принимает значение -2, если выше, то 2. Следующим действием находим разность углов. Потом надо узнать расстояние между танками. Если оно больше 100 виртуальных пикселей, тогда вражеский танк движется к цели. К слову, в AGK измерения ведутся в виртуальных единицах; если после запуска игры их оставить по умолчанию, размер игрового поля составит 100 на 100. Размер можно произвольно менять, в этом случае он будет влиять только на расположение и размер объектов. Вражеский танк ведет стрельбу при следующих условиях: выстрел раз в две секунды, относительный угол между танками меньше 20 градусов, дистанция меньше 500 единиц. Кроме того, в этой функции надо запретить танку выезд за границы игровой области.
Последняя проверка, помещенная в эту функцию, - это столкновение с препятствиями. В цикле перебираем все препятствия, проверяем, чтобы они были активны, и тогда смотрим, была ли с танком коллизия. Если эти условия выполняются, пытаемся найти лучший путь для обхода препятствия. Когда в столкновении с препятствием участвует танк юзера, просто отключаем тягу вперед. При движении или повороте танка, управляемого ИИ, прибавляем значение переменной turn к текущему углу поворота. Поворот танка: положение по X вычисляем, прибавляя к текущей координате X синус угла поворота, умноженного на 32, положение по Y находим через вычитание из текущей Y косинуса угла поворота танка, также умноженного на 32. То есть, когда мы применяем косинус или синус к углу, поворот выполняется в начале координат, и, чтобы сместить его в заданном направление, надо произвести умножение. С помощью функции SetSpritePositionByOffset производим позиционирование танка. Последнее действие выполняется только во время движения: в нем происходит инкремент координат X и Y на синус
и минус косинус угла поворота, умноженного на скорость танка.
Также функция resetPlayers останавливает и делает неактивными все снаряды, выпущенные танками, сбрасывает параметры танков к начальным значениям.
Затем в функции makefire происходит активация, позиционирование, задание вектора движения и скорости снаряда. В начале выполнения игры мы создали 20 снарядов и спрятали их за пределы экрана, сделав их неактивными, чтобы в нужный момент не тратить время на создание и инициализацию снаряда, а, спозиционировав его, сразу запустить. Поэтому в рассматриваемой функции в цикле от 1 до 20 мы проверяем наличие неактивного свободного снаряда. Найденный, он становится активным, в качестве родителя ему присваивается номер выстрелившего танка, снаряд поворачивается так же, как материнский танк, назначается соответствующая танку позиция. С помощью операций с синусом и косинусом ему назначается вектор полета, затем в функции settankfiredest, прибегая к тонкому математическому выражению, мы вычисляем точку приземления снаряда.
В цикле функции moveFire перебираем все снаряды и для тех из них, которые активны, инкрементируем положение в соответствии с вектором и скоростью. Если снаряд выходит за границы игровой области, просто делаем его неактивным, другими словами - помещаем в список готовых к использованию.
Функция checkHit проверяет попадание снаряда в любой танк. Внешний цикл перебирает танки, внутренний - снаряды. Первым делом внутри проверяются возможные столкновения снаряда с ячейкой пола, всего их 192, а их нумерация начинается с 200. Если произошло столкновение с ячейкой пола (ракета достигла своего пункта назначения), дальнейшие проверки выполнять не надо, делаем снаряд неактивным. Следующая проверка смотрит, чтобы выпущенная ракета не принадлежала выстрелившему ею танку. Если она проходит, мы делаем проверку столкновения снаряда с вражеским танком. Если столкновение зафиксировано, уменьшаем количество жизней у подбитого танка, останавливаем ракету, помещаем ее в список доступных для очередного выстрела. Данная функция возвращает номер подбитого танка.
Функция makeLevel, судя по названию, формирует карту уровня. Сначала двойным циклом проходим по всем 192 «кирпичам», делая их невидимыми и неактивными. Далее делаем видимыми только некоторые препятствия.
Оставшиеся три функции носят вспомогательный характер. Функция wrapAngle на основе полученного значения угла возвращает эквивалентное ему значение, не выходящее из диапазона 0–360. GetDistance получает четыре параметра - координаты двух точек и возвращает извлеченный корень из выражения, вычисленного по теореме Пифагора; таким образом, функция возвращает расстояние между двумя точками. И наконец, findAngle, получая координаты двух точек, возвращает разность между двумя углами.
Игра готова, код написан, можно запускать на выполнение. Но прежде не забудь скопировать из материалов к статье необходимый арт (из подпапки media каталога с игрой). Арт для игры состоит из семи файлов.
Подготовка билда и распространение
Тестирование на мобильных девайсах
В эту игру мы не сможем играть на смартфоне, поскольку здесь реализовано управление с клавиатуры, а на телефоне, естественно, ее нет, но все равно мы сможем запустить приложение на девайсе, чтобы протестировать его.
Разрабатывая игры с помощью AGK, их можно не только мгновенно тестировать на десктопе, но и точно так же, не заморачиваясь с установкой SDK и подготовкой билда, тестировать на мобильном устройстве. Для этого надо скачать и установить на свой девайс утилиту AGK Player .
Как создать игру. AGK Player
Я тестировал на планшете с ОС Android, однако имеется равнозначная версия плеера для iOS. Когда утилита будет установлена, надо подключить девайс к компу (через USB-кабель или по Wi-Fi), запустить AGK Player, а на десктопе в IDE AGK нажать пиктограмму Broadcast. AGK подключится к устройству, передаст данные, а в плеере запустится твоя игра.
Экспорт билда
Когда игра будет протестирована и отлажена, для ее публикации в сторе надо создать билд. Для этого с помощью команды меню File → Export Project «Tanki» → As Android Apk откроем окно Export Android APK, в котором предлагается задать свойства создаваемого пакета.
Как самому создать игру. Export Android APK
В области APK Settings, в ниспадающем списке APK Type предлагается выбрать целевую платформу: Google, Amazon, Ouya. App Name - имя приложения в операционной системе, Package Name - имя пакета, к примеру com.yazevsoft.Tanki. App Icon - иконка для приложения, Notification Icon - иконка уведомления, Oaya Large Icon - иконка в версии Android для игровой консоли Oaya. Ниже задается ориентация и минимально поддерживаемая версия Android. В области Permission задаются разрешения - доступ к компонентам системы, на которой будет выполняться наша игра: запись на внешние носители, доступ к камере, запись аудио, вибрация и прочее. Область Game Google Services/GameCircle Integration позволяет задать идентификатор для использования сервисов Google. В области Output задается путь, по которому будет сохранен итоговый пакет. Область Signing позволяет настроить свойства для подписания пакета для размещения его в сторах: задать версию, файл подписи.
Альтернативные сторы
Под конец статьи добавлю еще, что не стоит упираться и распространять свои приложения/игры только в топовых сторах - App Store, Google Play. Там все места заняли большие издатели, и покупатели в первую очередь смотрят на их продукты.
Обрати внимание на альтернативные сторы: Amazon AppStore, Opera Mobile Store, Яндекс.Стор и многие другие. На них меньше пользователей, меньше трафика, вместе с тем меньше конкуренции. Я не призываю ограничиваться тремя перечисленными, смотри шире. Лидирует платформа Android, между тем, кроме Apple AppStore, есть площадки для распространения iOS-приложений.
Появление альтернативных сторов связано не только с желанием их инициаторов заработать, дело тут и в национальных предпочтениях. Разговор идет о странах третьего мира и восточных товарищей - это Индия, Китай, Вьетнам и так далее. Там превалируют устаревшие Android-девайсы, и пользователи этих устройств готовы довольно часто совершать небольшие платежи за цифровые развлечения. Надо только правильно понять этот рынок. Поэтому выпускать там приложения/игры имеет смысл в сотрудничестве с местными дистрибьюторами. Тонкая восточная душа, сам понимаешь. На первое место выходит необходимость локализации своих игр для местных пользователей. Кроме того, в этих странах могут быть популярны игры других жанров: так же, как везде, казуалки, разные пазлы, экшны, гонки. Взгляни на следующую картинку об исследовании рынка. Она наглядно проиллюстрирует описанное выше.
Заключение
Подведем итоги. Статья началась с описания причин появления альтернативных движков и обзора самых популярных из них. Затем мы обсудили источники арта и другого стаффа для игр. Потом, выбрав один из движков, мы рассмотрели его основы и начали кодировать с его помощью простую двумерную игру - классические танки. Мы разработали простенькую аркаду с препятствиями, минимальным искусственным интеллектом, двумя врагами и оружием. После этого мы отладили свою игру прямо на девайсе под управлением Android и, когда все стало готово, собрали пакет для установки игры под любой Android. И все это в рамках одной статьи.
Игровая индустрия в целом и тем более инди-сцена постоянно в движении, постоянно развиваются. Это же относится к инструментарию инди-разработчиков. Он прогрессирует: появляются новые тулзы, улучшаются старые. Если раньше на многие средства разработки игр глядел с иронической улыбкой, то сейчас какие-то тулзы достигли очень впечатляющего состояния. И, применяя их, можно создавать вполне увлекательные и современно выглядящие игры.
До того как я стал разработчиком игр, я (да и все в моем окружении) считал себя дизайнером сайтов.
Не плохим, кстати, но дизайнером сайтов. Профессия, которая почти никак не используется в разработке игр.
Есть такой стереотип - когда кто-то говорит, что он в разрабытавает игры без команды, все сразу представляют его программистом. На самом деле, стереотип не так далек от правды: скорее всего, разработчик, описанный выше, действительно умеет программировать, но программистом он может себя не считать.
После одного игрового проекта со стримом всего процесса разработки мне часто пишут начинающие разработчики, что-то спрашивают, что-то показывают и на что-то жалуются. Недавно мне пришлось влезть в спор двух ребят, где темой спора было: “Что круче знать 3д-моделирование или программирование, если собираешься разрабатывать игры?”. Влез к ним в спор с предложением сделать первый шаг из схемы, что родилась в процессе участия в игровых проектах и создания своих.
Шаг 0. Станьте разработчиком игр
Именно первый, а точнее даже “нулевой”, шаг сделает Вас сразу разработчиками игр. Это не проекты, которые, может, уже есть у Вас за плечами, не навыки, котороми Вы, может, владеете, а простой, но очень важный шаг: скажите себе, а заодно и всему миру, что вы разработчик игр. Как только у вас уляжется в голове ответ на вопрос, чем вы занимаетесь - разработкой игр, - вы сразу станете для себя и окружающих разработчиком игр.Как это сказать себе и другим?
Уверен, что у вас уже есть какая-то профессия. Также я уверен, что Вы каждый день посещаете сайты/форумы, связанные с вашей профессией, читаете блоги и, может, даже книги.Первое, что надо сделать, чтобы стать разработчиком игр:
- Начать посещать сайты, связанные с тематикой игр и разработкой игр.
- Подписаться на блоги разработчиков, творчество которых вам нравится.
- Купить пару книг в “киндл” на амазоне, например, о игровом дизайне.
Все, вы разработчик игр . Действительно, элементарный шаг вам может дать доступ к столь “закрытой” профессии как разработчик игр. Правда, без опыта и регалий, но никто (ни вы, ни окружающие ) уже не оспорит, что вы разработчик игр.
Шаг 1. Найдите себе применение как разработчику игр
Теперь, когда Вы смело можете считать себя разработчиком игр, надо найти себе применение. Как писатели могут пребывавать в двух состояниях: ищут идею книги, пишут книгу, - так и разработчики: ищут проект (идею), делают проект. Бывает, конечно, еще и поддерживают проект, но лично я его всегда объединяю с процессом поиска нового.Слова “найти проект” для каждого разработчика игр значат разное, вот список популярных способов поиска проектов:
- найти проект, близкий по духу, с интересной идеей, проинвестировать в него свои навыки и/или деньги, а, может, какие-то еще ресурсы;
- взять пару игр и сделать из них микс;
- сделать клон игры, что может принести хорошую прибыль;
- придумать гениальную идею и попробовать найти энтузиастов;
- сделать ремейк любимой игры;
И множество других способов.
Этот этап - первая проверка для начинающего разработчика. Сделать выбор при полном отстутствии опыта очень сложно, но, к счастью, любой выбор принесет нам опыт.
Вот некоторые советы для прохождения этого шага:
- Начните что-то свое
. Свое от идеи до реализации в одиночку. Даже если у вас есть навыки программирования или вы сносно рисуете, - не вступайте в существующие проекты. Сделайте что-то небольшое, не требующее серьезных навыков.
Например, я сделал маме подарок на НГ - 3д-игру по психологической методике:
У меня не было опыта разработки на C# и программировать я особо не умел (немного знал python) и никогда до этого не моделил. - Скажите себе кодовую фразу: “Если кто-то смог, я тоже смогу ”. Как бы вы ни были готовы к игровому проекту, всегда будет задача, с которой вы никогда не сталкивались. Например, даже у опытных программистов программного обеспечения, часто нет опыта создания шейдеров. Скажите себе кодовую фразу и учитесь по ходу .
- Найдите себе единомышлеников . Мне в моем развитии очень сильно помогли: скайп-чатик разработчиков социальных игр (теперь уже создатели: Голос Припяти 3D, Tanks Heroes, Contract Wars, Батла и многие другие) , а также одногруппники из Scream School по курсу гейм-дизайна . Их успех будет вас подталкивать, а обмен опытом ускорит процесс развития.
- Выберите себе платформу для разработки . Определите платформу, которая вас устраивает. Это может быть, например, Unity - за ее возможности, огромное комьюнити и сравнительно низкий порог входа. Вне зависимости от платформы, станьте ее евангелистом . Это позволит вам наладить коммуникацию с другими разработчиками и быстрее развиваться.
- Не давайте эмоциям взять вверх . Ошибки и неудачи станут вашими спутниками на длительный период, а если вы будете делиться процессом развития с русскоговорящими разработчиками, будьте готовы к тоннам говна большому количеству негативных отзывов. Не позволяйте эмоциям брать вверх: слушайте любые отзывы и предложения, но относитесь ко всему с необходимой критикой. Сохраняйте критичность ума .
Шаг 2. Помогите себе закончить хотя бы ОДИН проект!
Если вы закончили свой первый проект как разработчик игр, скорее всего, вы что-то делали не так. Даже эпилептоид не сможет закончить свой первый проект, а к первому релизу у него в архиве будет пара-тройка (минимум) замороженных проектов. Это нормально . Мы учимся на своих ошибках, а не совершают их только идиоты или те, кто ничего не делают.Но в какой-то момент нужно будет собрать весь свой опыт, полученный из проб и ошибок, и, наконец, сделать свой первый релиз .
У каждого разработчика своя история первого релиза, но у меня есть пару советов, которые обязательно вам помогут:
- Вгоните себя в экстремальные условия
, а выходом из них сделайте релиз. Поставьте себе реальный, но очень сжатый срок на релиз, например, 48 часов или неделю, но спать будете по 4 часа в день. Это даст сильный толчок, заставит оптимально использовать время и сфокусироваться на результате.
- Сжатые сроки
Сжимая сроки, не оставляйте себе время на риск. Сжимайте до последнего, пример с 48 часами - хороший. - Отсутствие сна
Полное или почти полное отсутствие сна хороший мотиватор, но не доходите до крайностей. Практика показывает, что даже молодому организму надо давать отдых. - Менеджмент времени
Не стоит выделять много времени на тайм-менеджмент, но не забывайте ставить себе вехи (milestone). Например, скажите себе, что через 5 часов вам надо сделать играбельный прототип.Например, в своем первом 48 часовом марафоне (на нем я только рисовал) , я за первую треть времени нашел стиль игры, нарисовал основной, игровой экран и все спрайты врагов. И за оставшееся время сделал 170+ спрайтов анимации и дорисовал интерфейс.
- Конкурсы , особенно мероприятия, типа, HackDays или Ludum Dare, где нет времени на раздумья и надо сразу бросаться в работу, - отличное подспорье для пунктов выше.
- Сжатые сроки
- Поставьте себе рамки
. Для первого релиза, особено в сжатые сроки, критически необходимо знать рамки проекта. Выпишите себе минимум, что нужен для релиза, и не выходите из него. По необходимости:
- Урежьте список возможностей
Было бы здорово сделать возможность летать на самолетах, но если вы делаете шутер про пехоту, сфокусируйтесь на стрельбе. - Сократите время игры
Вероятно, вы рассчитывали сделать синглплеер на 5 часов игры, но вы останетесь победителем с демкой на 20 минут. - Уберите часть контента
Конечно, дополнительная карта не будет лишней для вашего тактического шутера, но релиз останется релизом даже с одной картой.
- Урежьте список возможностей
- Ищите простые пути
. Напоминайте себе, что вам необходим релиз, а не шедевр
. У вас остается право на ошибку, но вы потеряли право на заморозку проекта.
- Используйте костыли и хардкод
Не стоит фокусироваться на универсальности или производительности кода. Оптимизация тоже подождет. Просто идите к результату. - Копируйте, а не придумывайте
Если с ответом на любой вставший перед вами вопрос возникают трудности, копируйте решение коллег. - Используйте опыт на 150%
Учет сделаных ошибок - это, несомненно, хорошо, но пока вы их совершали, вы собрали багаж наработок. Постарайтесь использовать из него что-то. - Подключите все ресурсы
Если у вас есть друзья, готовые помочь, не отказывайтесь, а если у вас есть денежный ресурс - вкладывайте (покупайте готовые решения, контент и рабочие руки). Ваши вложения окупятся в дальнейшем.
- Используйте костыли и хардкод
Шаг 3. Сделать полноценный релиз
Когда прошлые шаги позади: релиз за плечами и опыт какой-то уже есть, - хочется, чтобы ваше хобби (не приносящий доход род занятий) переросло в настоящую профессию и источник хорошего, постоянного дохода. Каждый разработчик понимает, что для этого ему нужен полноценный релиз, не тот (те), что мы получили из второго шага, а полноценный релиз с шансом на успех. Увы, но релиз из прошлого шага нужен только для ощушения победы, а не успеха.Сделать полноценный релиз - это уже задача с миллионом способов решения, и вы обязательно будете иметь решение к тому моменту, когда у вас появится возможность для его создания. Но вот некоторые советы для настоящих indie (парней, что живут хардкором и разрабатывают свои игры без инвестиций и денег издателя):
- Делайте проект каждый день . У всех начинающих инди есть занятия, с которыми приходится совмещать разработку. Но не забывайте добавлять хотя бы одну строчку кода или новый спрайт в игру каждый божий день. Это очень важно, это пункт номер 1.
- Ставьте себе небольшие задачи и старайтесь выполнять их каждый день. Долго открытая задача, например: “разработать систему инвентаря”, может быстро превратиться в “висяк” с очень низким приоритетом. Поставьте задачу “Интерфейс основного окна инвентаря” и закройте в этот же день, а затем радуйтесь прогрессу.
- Два шага вперед, один в сторону . Какой бы разнообразной вы ни планировали игру, не стоит делать сразу 50 типов врагов и тысячи уровней. Сфокусируйтесь на реализации возможностей игрока, а не способах их проявлений. Делаете слешэр? - Реализуйте возможность рубить врага, а врагов клонируйте.
- Прототипируйте . Когда вы сфокусированы на настоящем релизе, необходимо отдавать себе отчет, что игра должна быть хорошей . Проверить это можно, прототипируя.
- Вы делаете игру . Не стоит делать из своей игры движок или фреймворк. Нет, я не про чистоту кода или возможность его переиспользовать. Работайте хорошо, и результат будет хороший. Не стоит реализовывать возможности до того, как поймете, что они действительно необходимы вашей игре . Например, если вы не уверены, что будет возможность менять цвет одежды героя, не стоит рисовать маску для смены цвета в шейдере. Убедитесь, что ваш дизайн подразумевает наличие предметов перед тем, как создать класс Item.
- И главное… Не бойтесь вернуться на шаг 2 . Возможно, еще не время для настоящего релиза.
Что должны учитывать будущие разработчики игр? С какого языка начать обучение? К чему стремиться? На кого равняться? И что необходимо сделать в первую очередь?
Большинство любителей рок-музыки рано или поздно берут в руки гитару. Фанаты спорта страстно мечтают о выходе на футбольное поле, баскетбольную площадку или теннисный корт. Ну а те, кто совершил сотни угонов в GTA, провел десятки часов в компьютерных клубах за Counter-Strike или достиг немалых успехов в MMORPG, наверняка задумываются о карьере разработчика игр.
Проблема в том, что данному направлению обучают в считанных учебных заведениях. Посему большинство разработчиков игр – самоучки, некогда сами составившие учебную программу. Но какие нюансы они учитывали? С чего начинали и к чему стремились? Какой язык учили в первую очередь? На эти и другие актуальные вопросы мы и постарались ответить.
К чему стремиться?
Перед походом в магазин вы составляете список покупок (хотя бы в голове). Перед поездкой в другой конец города – прокладываете маршрут. Ну а перед тем, как обучаться разработке игр, целесообразно задаться вопросом: чем именно вы хотите заниматься? Создавать мобильные приложения или браузерные игры? Трудиться в крупной компании или маленькой? Профессионально заниматься разработкой игр или посвящать этому свободное от работы время? И если первое, то что интересует вас больше: создание интерфейса, отшлифовка геймплея или написание скриптов?
Правильная постановка цели поможет сэкономить уйму времени и сил. Кроме того, позволит достичь конечного пункта кратчайшим путем. Без риска сойти с дороги или угодить в болото.
Какой язык учить?
Кроме того, от цели зависит и ответ на животрепещущий вопрос: с какого языка программирования стоит начинать?
Так, будущим разработчикам игр вроде Minecraft и мобильных приложений под Android стоит обратить пристальное внимание на Java. Для начала советуем пройти интенсив , тем более, что это бесплатно. Тем, кто заглядывается в сторону iOS – на Objective-C. Для браузерных игр порой хватает знания Ruby-On-Rails. Для совсем маленьких и простых временами достаточно HTML. В производстве Flash-игр используется ActionScript, а для написания скриптов любой сложности вам понадобится JavaScript или, возможно, не столь распространенная Lua. Для создания же небольших консольных игр требуется знание C#.
Что до наиболее крупнобюджетных игр (так называемого класса AAA), то большинство из них оснащены своим или заимствованным у коллег "движком". Нередко, впрочем, весь "движок" или его большая часть написана на C++. Именно этот язык использовался при создании множества известных "игрушек" – от Doom 3 и Call Of Duty до FIFA и The Sims. В то время как классика вроде Quake была написана на C.
Впрочем, в освоении C++ есть и загвоздка – чрезмерная сложность. Недаром ведь говорят, что браться за C++, не зная других языков, – все равно, что начинать изучение математики с линейных уравнений.
Достаточно ли одного языка?
Одна из прелестей программирования – возможность постоянного саморазвития. В разработке же игр (особенно крупных) самосовершенствование, в том числе изучение как можно большего количества языков, – не прихоть, а жизненная необходимость. Так, опытные разработчики, трудящиеся на благо гигантов игровой индустрии, нередко сталкиваются с необходимостью поочередно писать на 7-8 языках. При этом, помимо вышеуказанных языков, им приходится изучать, к примеру, Python либо и вовсе SQL (как вы понимаете, для создания баз данных).
Поэтому, если вы решили связать судьбу с производством крупных игр, будьте готовы стать "полиглотом". Кроме того, чем больше языков вы освоите, тем более интересные и разнообразные задачи перед вами поставят. Ну и, конечно, шансы на получение работы мечты заметно возрастут.
С ЧЕГО НАЧАТЬ?
Перед тем, как совершить кругосветное путешествие, нужно научиться ходить. Ну а перед серьезным игровым проектом необходимо попробовать силы в чем-то менее значимом.
Практически все опытные разработчики вне зависимости от регалий и таланта начинали с небольших приложений: настольных игр, вариаций известных "игрушек", простеньких "флэшек". Тогда они не думали о крупных выставках вроде E3, а накапливали бесценный опыт. Почему бы не последовать их примеру? При этом не обязательно писать архисложный код. Для дебюта достаточно использования специальных программ для создания игр (к примеру, Game Maker). Ведь даже благодаря несложному инструментарию вы значительно облегчите себе жизнь. Во-первых, в миниатюре поймете логику и структуру практически любого игрового приложения. Во-вторых, набьете шишки, которые заживут во время перехода к серьезным проектам. Наконец, в-третьих, обогатите портфолио. Ведь даже простая "игрушка" требует массу времени, терпения и творчества для выдумки концепции, написании кода и устранения багов. Кроме того, показывает, что с производством игр вы знакомы не только в сухой теории.
Что брать за ориентир?
Тот, кто мечтает стать писателем, прочитает сотни книг перед тем, как напишет хотя бы одно слово. Мастера игры на фортепиано на зубок знают лучшие произведения Штрауса, Шопена и Бетховена. Известные же художники перед крупными выставками наизусть заучивали историю искусств.
В разработке игр действует тот же принцип. Вы не сможете развиваться в вакууме. Поэтому играйте, вдохновляйтесь мастерами и, как губка, впитываете лучшее. При этом старайтесь смотреть на приложения не глазами "геймера", а взором разработчика. Иными словами: транспонируйте игру. Задумайтесь, почему в данный момент времени "бот" побежал налево, а не назад? Из-за каких факторов меняется сила и точность удара в спортивном симуляторе? Как создать "эффект усталости" при долгом беге персонажа? Как сделать так, чтобы во время дождя игрок слышал звук капель, а не свиной визг? В общем, проникайте в суть. Постарайтесь воссоздать в голове алгоритмы, с которыми сталкиваетесь во время игры. Поверьте, подобный конструктивный подход поможет вам в будущей нелегкой, но чертовски увлекательной карьере разработчика игр.
Что вы делаете, когда вы играете в какую-то игру и несколько раз не можете пройти одно и то же место? Можно просто найти уже готовое прохождение . Это, конечно, здорово, но что, если вы застряли в разработке игры? Какой гайд прочитать? Так пусть наша статья станет вашим пошаговым руководством к разработке вашей первой игры, если вы все еще не начали ее писать. Если уже начали, то вам все равно не помешает прочитать наши советы - быть может, увидите что-нибудь новое.
Прежде, чем мы начнем, мы хотим привести вам пример первой игры от автора этой статьи. Это была простая текстовая игра под названием Divine Blood:
Это была самая первая игра, причем запрограммированная для калькулятора TI-83 Plus . Позднее она была переписана автором на Java во время обучения в старших классах. Примечательно, что игра так и не была закончена.
Ко всеобщему сожалению, не доводить игры до логического конца - одна из самых распространенных проблем начинающих разработчиков. Соответственно, возникает вопрос: как повысить свою продуктивность и все-таки закончить начатый проект? Ответ прост: прочтите наше «прохождение» разработки игры.
Основные этапы
Если вы разрабатываете игру сами (а начинающие программисты обычно пишут как раз в одиночку), то процесс написания можно разделить на 4 основных этапа (или уровня, как и в играх):
- планирование;
- прототипирование;
- программирование;
- релиз.
Каждый следующий уровень в видеоигре сложнее, чем предыдущий. Здесь все также: каждый следующий этап имеет свои трудности и проблемы, с которыми вы неизбежно встретитесь. Это пошаговое руководство поможет вам не остановиться ни на одном этапе разработки игры. Мы приведем различные цитаты и мнения профессионалов, целиком прошедшие тот путь, который мы только начинаем.
В играх каждый уровень имеет свои проблемные места, а в конце - еще и босса. Так будет и у нас. Мы остановимся на них более подробно и, как и в любом прохождении, мы покажем, как пройти эти места и двинуться дальше.
Уровень 1: Планирование
Помните, сделав 90% игры, вы думаете, что потратили 90% своего времени. А доделывая оставшиеся 10%, вы тратите еще столько же «оставшегося» 90% времени. Составляйте план, учитывая это. - Ян Шрейбер
Первый и одновременно самый важный уровень разработки - планирование. На этом этапе вы должны спланировать всю свою деятельность и учесть все аспекты вашей игры. Цель этого уровня - обдумать все настолько тщательно, чтобы на остальных этапах вам не пришлось импровизировать.
Как только вы задумали что-то разработать, первым делом достаньте блокнотик, ручку и начинайте писать свои идеи. Максимально подробно останавливайтесь на деталях, это поможет вам в будущем. Пишите все, что вы хотели бы увидеть в вашей игре. Вся соль здесь заключается в том, что поначалу это сделать довольно просто: проект пока не разрос, и все у вас находится на виду. Но чем больше вы разрабатываете игру, тем сложнее будет начать писать свои идеи и в дальнейшем учитывать их.

Как уже говорилось выше - уделяйте внимание деталям. Записали новую фичу для реализации? Отметьте рядом, как она будет работать, как будет влиять на игрока и непосредственно на игровой процесс. И помните, секрет успешной разработки - решать существующие проблемы, пока они не накопились.
Разработка игры есть компромисс. Качественная игра должна уметь делать не все подряд, а только ограниченный набор хорошо работающих функций. - Патрик Вайет
Именно поэтому важно спланировать все, иначе на этапе разработки (уровень 3) вы захотите добавить в игру больше возможностей и начнете реализовывать все подряд, что категорически неправильно. Ваш проект рискует быть чрезмерно большим, отчего вам сложнее будет его контролировать, а вскоре вы вовсе бросите его в дальний ящик в надежде, что возьметесь за него позже. Если вы играли в серию игр Halo, представьте себе, как было бы трудно играть в нее, если бы вы столкнулись с парочкой охотников сразу после начала игры. Вы попросту будете умирать снова и снова, пока вам не надоест эта череда смертей. В разработке игры все аналогично.
Основная проблема первого этапа - притупить свое желание кодить и начать планировать. Написать код вы всегда сможете, для этого у вас будет целый этап. Спланируйте как можно больше аспектов вашей игры.
А боссом этого уровня являются вопросы. Просмотрите на все свои заметки и убедитесь в том, что у вас нет каких-либо непонятных пунктов: ни в используемых инструментах, ни в алгоритмах и прочем. Если же у вас действительно все вопросы решены, то вы смело можете считать, что уровень «Планирование» закончен. Но если остались непонятные аспекты - решите их, прежде чем переходить дальше.
Разумеется, у вас могут возникнуть такие вопросы, которые касаются, например, баланса игры. В таких случаях вы также готовы переходить дальше, поскольку эту проблему необходимо будет решить на втором и третьем этапах разработки игры.
Уровень 2: Прототипирование
Дизайн это процесс, а не результат. - Кристофер Симмонс
Вторым уровнем нашей игры-разработки является прототипирование. Здесь вы должны проверить и протестировать основную механику и особенности вашей игры. Выше мы говорили о том, что на предыдущем этапе могут возникнуть вопросы по поводу баланса. Второй уровень как раз и нужен для того, чтобы отшлифовать этот параметр.
На этом этапе вы будете писать код не очень красивый и не совсем правильный. Это в порядке вещей, поскольку вы пишете прототип. Когда вы перейдете дальше, вы уже будете знать, что и где работает не так, как должно.
Если вы получаете удовольствие от какой-либо игры, то вы захотите поиграть в нее снова, независимо от того, сколько очков или денег вы там набрали. - Стэн Яроцки
Несмотря на то, что данный этап мы выделили отдельно, в некоторых случаях его можно пропустить, поскольку он имеет очень много общего с планированием. Вы можете подумать, что мы не постоянны в своих суждениях: совсем недавно призывали вас не переходить на следующий уровень, пока не пройден текущий, а сейчас говорим, что этап прототипирования можно пропустить.
Вы помните секретные телепорты в игре Super Mario Bros? Игрок мог найти хорошо спрятанные трубы, прыгнув в которые можно было пропустить несколько уровней. Так и здесь. Правда, мы не полностью пропускаем прототипирование, а совмещаем его с планированием.

Хотим заметить, что первые два этапа взаимозаменяемы. Быть может, вы хотите проверить основную механику вашей игры, прежде чем потратите кучу времени на детали? А может, вы хотите попробовать какую-то возможность в вашей игре? Это основные причины, почему есть смысл в том, чтобы поменять порядок первых двух этапов.
Хорошая игра - это поток интересных задач, решаемых игроком. - Брюс Шелли
На этом этапе у вас могут возникнуть две главные сложности. Первая - желание наконец перейти на следующий этап и начать писать код. Как мы уже говорили выше, вы должны быть максимально готовы к переходу на следующий уровень, а потому - не спешите. Второй сложностью является желание создать более точный и законченный прототип. Этого делать уж точно не стоит, поскольку прототип по определению не должен быть законченным продуктом.
А боссом этого уровня является полнота. Вы должны собрать воедино все наработки первого и второго этапа и понять, что же у вас должно получиться в итоге. Если вы будете иметь хорошее представление о вашем конечном проекте, то проблем при написании кода у вас точно не возникнет. А следовательно, повысятся шансы закончить игру.
Уровень 3: Программирование
Третий уровень - наиболее сложный уровень для начинающих программистов. Дойдя до него, многие забрасывают свой проект. Но бояться здесь ничего не надо! Первые два этапа пройдены и вы уже на полпути к окончанию разработки.
Чтобы начать этот этап, вам стоит определиться с целевой платформой вашей игры. Будет эта игра для консолей, а, может быть, мобильная или вовсе браузерная? Определившись с платформой, выберите необходимый инструментарий и язык программирования.
На самом деле эти два шага можно выполнить в обратном порядке. Имея какую-либо среду разработки (или язык программирования), вы можете проанализировать ее возможности и решить, что вы сможете написать.
Вы очень сильно облегчите себе жизнь, если воспользуетесь бесплатными библиотеками и ресурсами. Не пытайтесь изобретать велосипед: используйте то, что находится в свободном доступе. Это поможет вам приберечь немного сил для того, чтобы закончить проект.
«Я не умею рисовать» - используй клипарт. «Я не умею создавать звуки» - ищи MIDI файлы. «Я не умею программировать» - никого это не волнует, не программируй! - Роб
Основными неприятными моментами на этом этапе выступают появляющиеся проблемы и разочарование. Вы неоднократно будете натыкаться на моменты, когда не будете знать, как решить текущую задачу. Более того, вполне возможно, что ваша игра на какой-то стадии разработки не оправдает ваших надежд.
Но вы не должны унывать! Лучшее решение этих проблем - отвлечься от проекта на несколько дней. Вы очистите ваш ум и позволите новым идеям посетить его. Также неоднократно замечено, что «утро вечера мудренее». Застряли? Не знаете как решить проблему? Ложитесь спать, а на завтрашнее утро вы, возможно, сразу поймете причину ваших неудач. Не работайте до изнеможения и не изнуряйте себя: работа над проектом должна быть в удовольствие.
Если вы пытаетесь и не можете решить действительно сложную проблему - остановитесь. Решите более простую проблему, которая выполняет те же действия, что и сложная. - Даниель Кук
Ну а боссом этого уровня является сама игра. Да, игра, которую вы и пишете. Она не должна быть идеальной, но она должна быть полноценной. Такой, в которую бы люди могли и хотели играть.
Уровень 4: Релиз
Никогда не сдавайся. - Элис Тейлор
Наконец-то мы добрались и до релиза. Конечно же, этот уровень не такой сложный, как предыдущий, но и легкомысленно относится к нему не стоит. На этом этапе вы должны убедить людей играть в вашу игру и давать вам обратную связь (вы же хотите улучшить свой проект?). Основываясь на отзывах игроков, внесите в ваше приложение те изменения, которые сделают игру более увлекательной по вашему мнению.
Главная проблема этого этапа - критика. Всегда найдутся те, кому попросту не понравится ваша игра. Это нормально. Не стоить из-за таких людей опускать руки. Ориентируйтесь лучше на тех, кто играет в ваше приложение и предлагает вам добавить в нее новые возможности.
Начиная создавать игру, не смотрите на результаты других. Создайте то, что хотите вы. - Роб
А финальным боссом всего нашего путешествия будет являться ваша гордость. Вы сделали полноценную игру от начала и до конца! На самом деле, не все могут похвастаться этим.
Каждый разработчик когда-нибудь напишет «плохую» игру. Если вы еще не написали - напишете. Все мы напишем. - Бренда Ромеро
И помните, дорога к успеху вымощена многократными неудачами. Никогда не сдавайтесь!
Вывод
Разработка первой игры - захватывающее занятие, выполняя которое мы получаем бесценный опыт. И все же, многие разработчики не могут довести свой проект до конца, хотя так категорически нельзя поступать. Следуя нашим четырем «уровням» разработки игры, вы увеличите свои шансы довести ваш проект до логического завершения.
А теперь соберитесь и напишите свою игру!
Как Яндекс использует ваши данные и машинное обучение для персонализации сервисов - .
