Мои маленькие достижения в Monogame

И рассуждения о том, почему строить велосипеды полезно.

Тут я учился делать физику песка

Все началось с архитектуры. Поскольку все, что дает вам Monogame (он же Microsoft XNA), это вывод спрайтов на экран и некоторые математические библиотеки (например, для работы с векторами и точками, и те, на мой взгляд, сделаны не достаточно хорошо), \поправка: речь про инструменты для той задачи, которую я выполнял\ я занялся разработкой фреймворка по привычной мне и многим структуре Entity Component System с, соответственно, сущностями, компонентами и сценами. Такая архитектура позволила мне перескакивать с разработки одного компонента сразу к другому, поэтому я постоянно решал все новые и уникальные задачи, совсем не скучая и не рискуя перегореть.

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

Данный проект должен был перерасти в файтинг с управлением элементами. Бойцы могли бы вырывать землю из под ног на карте или замораживать воду, а потом кидать все это или расстреливать оппонента. В один момент я начал осознавать, что, если по части программирования, геймдизайна и в принципе игровой логике у меня проблем не возникнет (я студент техникума, у меня достаточно свободного времени и пока что я могу не думать о том, что не зарабатываю деньги), то вот графику я реализовать никак не смогу, потому что мои навыки в сфере рисования абсолютно нулевые. Да и амбиции я поднял такие, что проект опять затянется не менее чем на МНОГО, поэтому я немного впал в апатию, а через пару дней отчаяния приступил к элементарной, но очень легко-реализуемой и годной для моего уровня гиперказуалке.

Я случайно сказал, что она легко-реализуема? Ну, если не учесть то, что для отрисовки полигонов в нужном мне виде мне пришлось изучать некоторые математические концепции дополнительно. Например, для закраски полигонов шейдером я проверял, находится ли точка внутри всех граней полигона, используя скалярное умножение, находя нормали и делая некоторые другие непотребства. Мы живем в отличное время и все необходимое для отрисовки полигонов я нашел в интернете, но предварительно я успел сдаться пару раз в 4 часа ночи, пытаясь допереть до этого самому или найти более простое решение, которое мог позволить форм-фактор движка. Также в XNA есть возможность рисовать полигоны из текстур, но я предпочел делать это вручную в привычной мне системе измерений и без матриц, в которые я пока не хочу залезать без необходимости. Наверняка я еще пожалею о своем решении. Зато изучил, как работают и как писать шейдеры, что тоже очень круто.

Еще спустя пару дней я довольно легко реализовал столкновения круглых объектов с полигонами. Но тут показыать особо нечего.

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

Это просто рассуждения, и я не хотел бы, чтобы раздел комментариев превращался в полигон. Потому я очень прошу высказать свою точку зрения конструктивно и без негатива, потому что моя цель - разобраться, а не доказать свою правоту. Благодарю за прочтение!

88 показов
3.3K3.3K открытий
22 репоста
46 комментариев

Хотел бы я написал здесь че-нить умное. Но поскольку я тупой и половины слов не понял, напишу, что было интересно.

Ответить

почему строить велосипеды полезноУ меня для тебя плохие новости - ничто их этого не полезно

Ответить

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

Ответить

Не умея строить велосипед, не построишь мотоцикл.

Ответить

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

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

Это моё ИМХО как недопрограммиста))

Ответить

Комментарий недоступен

Ответить

Комментарий недоступен

Ответить