Как я написал игру за 3 года

Всем привет!

На днях я закончил создание своей небольшой игры, и хочу описать вам путь, по которому я прошел. Хочу сразу оговориться, что моей главной целью было получение знаний и опыта в создании 3D игр для Android, и этого я успешно добился. По этой же причине я не использовал готовые движки.

Я начинал с создания карт для Counter-Strike: сделал карту с автобусной остановкой из своего города, пытался сделать школу. Круто же постреляться в родной школе? Это дало мне базовое понимание из чего состоит виртуальный мир.
Несколько позже я начал проходить туториалы (www.learnopengles.com/...​sson-one-getting-started) по OpenGL на Android. Радовался как ребенок, когда впервые на экране телефона появился заветный треугольник!

Затем получился кубик с наложенной текстурой камня и появились мысли о создании своей простейшей игры. Перенос игры Portal на Android казался вполне достижимой задачей для новичка. Я сильно недооценивал предстоящий объем работ. Хорошо, что на то время уже существовал Portal в Google Play, и я успел создать только одну комнату.
Тогда я решил сделать что-то попроще, и, увидев в Футураме бильярд без гравитации, решил его по-быстрому воплотить (пока другие не успели). Оказалась я по-прежнему недооценивал объем работ. И, кстати, бильярд без гравитации таки успели сделать раньше меня.

Вот с этого момента, примерно 3 года назад, началось создание моей первой игры Star Pool — бильярд в невесомости. В начале у меня было базовое знание Java и минимальные навыки редактирования картинок. Я работал, в основном, после работы, а также с большими перерывами, когда совсем не хватало времени.

Графический движок
По мере того, как я добавлял функционал к графическому «движку», заимствованному из туториалов, он становился все менее гибким и более хрупким. К этому моменту я 2 раза его серьезно переделывал, и сейчас его структура сделана «на троечку». Если б у меня была возможность вернуться в прошлое, я б себе сказал: «ПРОДУМАЙ АРХИТЕКТУРУ!!!». Тем не менее, из плюсов — быстрая загрузка и весьма неплохая производительность.
Эта часть программы была для меня самой интересной, потому что все что ты делаешь можно сразу посмотреть, пощупать, и я получал кучу позитивный эмоций, когда задуманное появлялось на экране. К примеру небо в играх — это маленький кубик вокруг камеры, закрашенный текстурой неба, который рисуется на экран в первую очередь. Все остальные объекты мира накладываются позже, затирая небо, и оно «просвечивается» в местах, где не было объектов. Поскольку кубик всегда рисуется вокруг камеры, создается ощущение что небо движется вместе с ней. И еще, на самом деле, не камера движется — она всегда в (0, 0, 0); это все остальные объекты меняют свое положение относительно камеры.

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

Текстуры
Когда игра уже стабильно работала, и близился момент релиза, я вспомнил что использовал текстуры из чужих игр. Я не смог найти текстуры приемлемого качества в бесплатном доступе, и решил нарисовать их самостоятельно (в Paint.net). А что? Тоже опыт! Но поскольку с фантазией у меня туго, я рисовал свои текстуры похожими на те что использовал в начале. Больше всего времени заняла главная иконка. Серьезно, ее пришлось самому придумывать; несколько дней ее делал и опрашивал друзей, как она им нравится. Правда классная?

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

play.google.com/...​ls?id=com.xeon13.starpool

Спасибо за внимание!

👍НравитсяПонравилось0
В избранноеВ избранном0
LinkedIn

Лучшие комментарии пропустить

Вітаю з релізом! Сам факт того, що не покинув за 3и роки викликає як мінімум захоплення (принаймні в мене). Гра прикольна, раніше в подібні не грав:).
Бажаю успіху і пам’ятай — це тільки початок:)

Побільше б таки статей на Доу замість «Де найти дєвку прогграмісту». Автор молодець!

Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Автору респектище! Но есть 1 вопрос: вы начинали писать игру уже имея программерский бекграунд или будучи совсем новичком?

У меня уже был опыт программирования, но в основном на других языках. Совсем новичком я б даже не пытался наверное.

если не секрет, на каких?

C++, C#, и слабенько Java но не на Android.

неплохой такой бекграунд для геймдева =) особенно плюсы

Я вначале хотел писать графический движок на С++. Но потом подумал что это будет раза в 2 больше работы и отказался от этой идеи.

Т.е. между С++ и «слабенько Java не на Android» вы выбрали второе?

Да, и пока не пожалел. Пожалею когда захочется это перенести на iOS.

Интересно было бы узнать примерную оценку суммарно затраченного времени.

Даже примерно не смогу оценить, очень неравномерно расходовалось время.
Если цель именно сделать игру, то наверное стоит идти по другому пути — использовать готовый движок.

Reviews
4.8
43 total

5 38
4 4
3 0
2 0
1 1

Всё очень круто, так держать!

Респект, автор — большой молодец! Кстати, глядя на конечный результат, всё равно видно влияние Portal :)

Автор молодец!)

Супер! Автор молодець, круто, що завершив гру і що розкрутив стандартну ідею в щось нове.
Питання, ти розробляв гру постійно після основної роботи чи все ж брав перерви(відпустки, звільнявся і т.д.) для розробки гри? І чи знадобився тобі отриманий досвід?

Не звільнявся, але коли брав відпустки то працював над грою.
Знадобився загальний досвід — архітектура, практичне використання паттернів, і тд. Досвід роботи з OpenGL поки що не знадобився, оскільки на роботі в мене інший тип проектів (бекенд).

Круто же постреляться в родной школе?
меня одного это смутило?

Я это писал без плохого умысла. Вы играли контру?

играю) уверен что без умысла, просто подумал что текст могут читать школьники и... как бы не претендуя на роль психолога и все же...

Вы с США пишите ?

текст могут читать школьники и... как бы не претендуя на роль психолога и все же...
А если не дай бог школота в GTA поиграет...

Наверное, да, ибо я тоже рисовал первый этаж своего лицея в doom :)

Я делал карту родной школы ещё в детстве под CS 1.6. Да, это действительно круто — постреляться в родной школе.

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

Как вы будете создавать подобные проблемы для удара, если в пространстве очень маленькая вероятность того, что шар противника будет закрывать тот, который нужно ударить?

Такая ситуация действительно мне относительно редко встречалась. Можно увеличить размер шаров чтоб увеличить эту вероятность, но думаю играбельность снизится. Надо будет поэксперементировать, может добавлю варианты размеров куба / шара.
С другой стороны — это ведь не обычный бильярд, не стоит сильно надеяться что будут те же проблемы.

Можна від вас туторіали [Звичайно відео хотілось би] «Як створити гру за 3 роки» ?))

Скачав, ловіть лайків і зразу запитання. Навчальне відео не можна в саму гру якось всунути а не перехід в ютюб? Ну і навчальне відео нічого не навчає, літають кульки і все.

Всунути туторіал в гру займе багато часу. Зроблю, але трохи пізніше. Саме відео в гру всунути не вийде — гра станет важчою в 30 раз :)
Відео показує способи управління камерою, і куди забивати шари.

Тодi ну його в пень, хай так буде. Я думав не про те, щоб все вiдео десь в гру сунути,а вiдображати там той же ютюб. Але то таке, з грою бистро розiбрався й так

Даже одного видео было достаточно, чтобы воскликнуть «Охрененная игрушка!!!» :)

Побільше б таки статей на Доу замість «Де найти дєвку прогграмісту». Автор молодець!

Озвученная вами тема не менее важна ;)

Архиважная тема для айтишного ресурса :)

dou.ua/lenta/tags/DOU Проектор
каждую неделю постим, приглашаем присылать свои истории всех, кому есть о чем рассказать

А ведь и правда тема девок нераскрыта!

Как я создавал три года 3D девку, и внезапно женился.

В этом доу значительно уступает хабру. На хабре статей технического характера в разы больше и читать его приятнее. А здесь же интересная тема, вроде этой появляются не так уж и часто

На Хабре эта тема (про игру за 3 года) тоже появилась:
habrahabr.ru/post/276447

Выложил одновременно здесь и там, в надежде что хоть где-нибудь пройду модерацию. К тому же dou вроде заблокирован в России?

Анонс без России — буквы на ветер :)

Очень круто! Вы молодец! (=

Мне кажется эта игра ахеренно бы пошла на таком девайсе как Microsoft Hololens, либо Oculus Rift ) Ябпоиграл! ! !

Як на мене то невірний заголовок, потрібно «Як я 3 роки гру писав» ;)

Сори за офтоп. Но может посоветуете.
Что используют сейчас для отладки шейеров?
Я вот например до сиих пор использую RenderMonkey, и хоть проект древний как г-но мамонта, но я ничего другого такого же нормального найти не смог, а то подделие от NVIDIA написаное на .Net у меня просто когда то не завелось, хотел попробовать но не получилось.

Круто! Молодец, что довёл до конца.
Я тоже писал игрушку, простую (псевдо 2D) казуалку, под Win/OSX/iOS (до Android не добрался).
Но когда движок был готов и вылизан, я понял что с контентом я круто просчитался, его нужно было делать, и хорошм, а за 2 года я «выдохся» для этого проекта. Потом начал другой.
Так она и лежит у меня в репе, кто знает, может я таки соберусь и доведу ее до релиза.

Я несколько раз выдыхался, но обратно брался за нее.
Обязательно продолжайте работу над своей игрой! Главное найти мотивацию.

Очень круто! Поздравляю с резлизом!

Мой совет — делай версию под большие экраны. Для телевизоров. На мобилах в такое играть быстро надоест, а вот казуалочка для телевизора — самое оно! Ну соответственно и под андроидные приставки.

Рынок огромен, учитывая само свойство экрана — он большой. А значит играть в него можно дольше, не напрягаясь. Плюс твоя игра не сильно требовательна к управлению.

Ну и смотри, этот рынок схлопнется так же быстро, как рынок казуалок для PC. То есть будут всего несколько игр, захвативших мир своей простотой, типа AngryBirds. И всё, если не успел схватить пик тренда — ты в ауте.

Спасибо, попробую доделать под телевизоры. Думаю будет не сложно :)

Вітаю з релізом! Сам факт того, що не покинув за 3и роки викликає як мінімум захоплення (принаймні в мене). Гра прикольна, раніше в подібні не грав:).
Бажаю успіху і пам’ятай — це тільки початок:)

Гра — прикольна!
Шо з iOS ?

На iOS її потрібно буде переписати з нуля. Я не бачу способів легко перенести її з андроіда.
Тому напевне що не скоро.

як на таку якість гри, щось слабенько її качають...
Скільки Reviews ти замовив? На паблішерів виходив?

На паблішерів не виходив, reviews не замовляв. Хочу зробити онлайн режим спочатку.

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

Музыка честно куплена на одном из сайтов, сам делать музыку я не умею :)
Все что в игре присутствует — состоит из треугольников.
Вот как выглядит шар: www.junkship.net/...RNcvrUKnEGi3qy9QJi69w.jpg
Чем больше треугольников составляют шар, тем глаже он выгляди, но тем больше времени тратится на отрисовку. Я пытался найти золотую середину.
Возможно потом я добавлю настройку качества графики, когда у движка будет больше возможностей.

Так шары как раз надо было сделать высокополигональными, triangle-strip, всё равно на сцене ничего особого нет, это потянут на ура даже самые старые видеокарты. Можно добавить источник света в шары. Код вообще на С++ написан?
Покупные ресурсы имеет смысл юзать, может только если у твоей игры будут миллионные скачивания, в суд за текстуры на тебя никто не подаст. Особенно если ты зашьёшь ресурсы в пак, и в лицензии напишешь насчёт извлечения компонент.

Хм, даже интересно стало. Попробую увеличить число полигонов и замерю разницу на сцене с 100 — 500 шарами. И физику заодно проверю.
Код на Java написан, хотя С++ я тоже знаю.

Просто для справки — чахлая SGX535 single core способна рендерить 2млн треугольников в секунду. Если хочешь — могу скинуть свой порт оригинального Utah чайника для OpenGL ES 1.x/2.x/3.x (я перетащил evaluators из OpenGL). Можешь просто увеличивать детализацию чайника до тех пор пока железка не скажет «ой, всё».

Спасибо! Я уже увеличил количество треугольников в 3 раза примерно. Вроде не тормозит, но еще проверю на древних устройствах.

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

Ушло.

Очень недурно. Я попробовал в машине её запустить, вполне играбельно, только камера скачет немного, там нет гироскопа, если вдруг игра на него расчитана. И силовые поля я бы сделал по-прозрачнее раз в два-три, ибо если камера снаружи, то плохо видно, что внутри происходит.

По поводу нетелефонных устройств проще всего поставить на PC/Mac bluestacks, чтобы понять, как оно выглядит на таком классе устройств.

Спасибо, я учту это в следующей версии.

Отличная задумака! Я тоже раньше писал код симулятора бильярда, издавался под брендом «Billard Kings» от soft-xpansion. Физический движок там юзается от newtondynamics, с симуляцией физики сплошных твёрдых тел. Движок простой, и для бильярда он отлично подходит. Проект развивать можно в плане добавления новых игр со своими правилами, бильярдные трюки, и ещё что самое важное — нужны турниры и всяческая интерактивность между игроками.

Да, следующая основная фича это онлайн режим. Я его начал делать, но в результате вырезал.
Google Play Game Services должен существенно упростить задачу.

О, респект. Сохраню пост на случай, если лурковский раздел об инди оживёт.

Герой. Опыта получена куча и он всяко пригодится.
Что делать дальше — зависит от того, чего хочется. Тянуть параллельно движок с игрой — тяжело. Потому совет — если хочется писать игры возьми движок. Если скорее хочется писать раза в 3 меньше игр, но при том ещё и иметь свой движок (правда с получением денег с него будут большие проблемы) — пиcать параллельно и движок.

Спасибо!
Свой движок я наверное использую в след игре (есть идейка). Она очень простая, не нужно будет много дописывать.
Если делать игры посерьезнее, то действительно проще взять готовый движок.

Полный цикл разработки осилить самому — это довольно сложно. Респект за такую работу!
Имхо шарики мало вращаются, понятное дело, что они висят в воздухе а не катаются, но все же при ударах они закручивались бы сильнее. Графике не хватает какого то «лоска». Может какие то блуры добавлять надо или еще что — я не разбираюсь. Оцениваю как рядовой пользователь. Напоминает игры эпохи Вин98 по графике — тогда как раз был популярный какой то бильярд.
Планируете развивать игру? Продвигать?

Большое спасибо за отзыв!
Да, я б хотел продолжить работу над ней, уже есть список задач на будущее. Улучшение графики — одна из них (отражения, тени).
Сейчас я ищу отзывы, чтоб лучше понять в каком направлении двигаться дальше.

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

Надо было использовать типовой движок, а не заниматься написанием подобия движка с коленки.

Как я писал — изначальная цель была получение опыта. Я надеюсь это мне поможет в дальнейшем изучении готовых движков.

А какой движок используется в Game Questing Development, Ltd?

Подписаться на комментарии