Грабли начинающих разработчиков игр

На примере собственной боли.

Грабли начинающих разработчиков игр

Введение

Данный пост адресован преимущественно новичкам. Пусть вас не раздражают обобщения, если вы считаете себя опытным или информацию, доносимую тут, не относящуюся к вам. Я не ставлю целью поучить вас чему-то, не превозношу себя и не принижаю вас как разработчиков. В этой статье я лишь хочу заставить вас пересмотреть подход к своей работе, чтобы исключить популярнейшие в моей практике и наблюдениях грабли, избавиться от ненужной головной боли и получать удовольствие от хобби, а в дальнейшем, возможно, и работы. Ставьте все под сомнение и участвуйте в дискуссии, если с чем-то не согласны.

Много не откусить

Если бы я начинал разработку собственной игры (ссылка в конце прилагается) с нынешним опытом и осознанием того, как тяжело будет под конец, я бы сразу же поставил свои амбиции на место. Из 100 планируемых уровней готово жалких 49 (да, на 50-ый меня не хватило, честно). Стыдный результат и самая распространенная ошибка. Ребята, которых я знаю, собирались делать игру 4 раза (включая один раз со мной). Все эти команды в итоге были расформированы. Преимущественно из-за того, что планировались какие-то совершенно безумные идеи, которые с нашим опытом стоило бы отбросить ещё на корню. Многие идут в геймдев, чтобы сделать своего убийцу. Вы можете считать верным стремление разработчика научиться создавать игры на каком-то сложнейшем проекте с открытым миром и множеством механик, но я считаю, что обучение на относительно небольших проектах приведет к повышению у человека интереса к профессии. Более того, большие проекты тратят очень много сил, времени и денег. Все эти труды в силу вашей неопытности могут просто не окупиться. Пожалуй, единственное, что может утешить в этой ситуации — развитие в вас необходимого опыта и скепсиса.

Гит — наше все

Поучительная история: как-то в середине разработки я решил распределить резервные копии проекта по дискам. Перепутал версии, безвозвратно заменил новую версию игры старой. Да, любимое утешение школьных учителей «Не глупый, просто очень невнимательный» — мое кредо. Улетучился целый день работы. А представьте, если у вас в один прекрасный момент сгорит или иным образом выйдет из строя накопитель с проектом. Не у каждого найдутся силы восстанавливать и переделывать столько работы. Ещё перед началом проекта обязательно позаботьтесь об удаленных резервных копиях. Благодаря распространению облачных сервисов, мы можем позволить себе бесплатно использовать GitHub и его альтернативы, чтобы быстро, инкрементально (не перекачивая весь проект, но только изменённые его части) загружать свои работы в хранилище, где оно будет в большей безопасности, нежели на вашем компьютере. Это мой самый настойчивый совет в данном списке.

Планирование

За что можно любить индивидуальную разработку? Конечно, за неформальный рабочий процесс, отсутствие бюрократии, возможность лепить из вашего проекта что вы хотите и как хотите. Необходимо признать, что такой подход сильно тормозит ваше развитие как разработчика. Систематизация процесса разработки имеет множество преимуществ: Можно ещё до начала реализации понять, какой объем работы необходимо выполнить; Как следствие первого, правильно рассчитать свои силы, время и настроение; Устанавливая рамки по времени реализации, можно анализировать свою продуктивность; Как следствие третьего, даже при возникновении непредвиденных проблем можно менять и перестраивать свои планы, чтобы поспевать за разумными сроками (не делать головоломку из 49 уровней год) и держать себя в творческом тонусе; Исключаются ошибки, связанные с конфликтами нескольких механик. Кроме того, существует масса методологий, позволяющих вам лучше руководить рабочим процессом. Наверное, уже каждый из вас знает об одной из них: Kanban.

Kanban доски представляют собой стикеры с задачами
Kanban доски представляют собой стикеры с задачами

Самый популярный инструмент для работы по этой методологии — Trello. Уже этого хватит для того, чтобы ощутимо увеличить вашу продуктивность, если вы подойдёте к этому со всем энтузиазмом и ответственностью. В следующей главе мы подробнее остановимся на последнем пункте.

Архитектура

Что такое «костыль» в программировании? В моем понимании, костыль — решение конкретной, индивидуальной проблемы в обход глобальных ошибок целой системы. Сложновато? Вот пример. Движение кубиков в моей игре не физично. Это значит, что только мои руки отвечают за то, как ведёт себя каждый кубик, когда вы свайпаете в разные стороны. Все было хорошо, пока я не начал делать последнюю механику: стены, через которые может пройти только блок определенного цвета. Мне пришлось обрабатывать каждый индивидуальный случай взаимного расположения блоков. Иными словами, уровни с этими стенами уровни целиком построены на костыле, потому что я недостаточно хорошо продумал механику движения блоков с учётом добавляемых приколюх.

Один из уровней с такими стенами
Один из уровней с такими стенами

На самом деле, разработка механик в вакууме — не такая сложная задача. Но если вы планируете масштабировать свою игру, добавлять в нее другие механики или просто строить новые и необычные уровни, вам необходимо много думать над архитектурой игровых механик. Ваша реализация должна исключать неожиданное поведение объектов игры в большинстве случаев. С такими системами работать — одно удовольствие, потому что вам не придется потом думать: «А я не сломаю игру, если за этой стеной окажется ещё одна? А если я буду нажимать пробел слишком часто?». Все это требует знания теории программирования и развитого логического мышления. Почему я акцентирую на этом внимание? Потому что тенденция делать механики «на ходу», то есть так, как сначала пришло в голову — ужасна. Примеры таких механик сгодятся для учебников по программированию, не более.

Я выделил главные, на мой взгляд, проблемы, с которыми сталкиваются начинающие разработчики игр. В тексте фигурировала эта игра: https://play.google.com/store/apps/detail? id=com.Animpaf.Pica Я буду рад, если вы ознакомитесь с ней. Спасибо.

5353
9 комментариев

Каждый разработчикпреимущественно новичкам.если вы считаете себя опытнымне относящуюся к вамЖелтущные заголовки уже и тут, за две строчки из "каждого", мы переходим в "только для".

8

О сказанных вещах действительно должен знать каждый разработчик, но это не отменяет, что я не хочу акцентировать на этом внимание "преимущественно" новичков, потому что как раз-таки они эти вещи и не понимают. А в броских заголовках нет никаких проблем, если они полностью соответствуют сказанному в тексте.

3

Ну и вырывать из контекста тоже не надо...
"Пусть вас не раздражают обобщения, если ***вы считаете*** себя опытным или информацию, доносимую тут, **не относящуюся к вам.**"

2

При разработке чего угодно, в принципе, могут возникнуть те же проблемы. Годно

2