Gamedev chelovekbeznika
1 580

«Объясняю каждую строчку» — It's alive! Первый отчёт

It's alive!
Robot chicken
В закладки
Аудио

Подвожу итоги первых стримов и описываю то, какую форму приняла передача за первую неделю своего существования.

FAQ

???

Передача на ютубе, где я в прямом эфире разрабатываю игру. И объясняю подробно, как я это делаю, и какими инструментами пользуюсь. И под инструментами я понимаю не только Visual Studio и Monogame, но и идеи, которые помогают делать код лучше. Ну, хотя бы не безбрежно отвратительным. Подробнее тут:

Ой, а это не на Unity?

Нет, это не на Unity. Это на Monogame. Это не на Unity, потому что я не шарю за Unity. Шарю ли я за Monogame? Есть немного (там много и не надо). Если вам интересно, что это такое, то об этом я уже целый лонг-рид писал:

Что игра из себя будет представлять, какие планы на будущее?

Буду делать твин-стик шутер. Детальный план есть только на ближайшее будущее. Чуть ниже я его дам.

А теперь пару вопросов чуть детальнее.

И как далеко продвинулась работа?

Пока недалеко. Всё, что у меня есть, это спрайт игрока, который я двигаю (геймпадом или клавиатурой, что настраивается с помощью текстового файла) по уровню, на котором три мины. И они не причиняют вреда игроку, да. Камера двигается следом за игроком ещё.

Да, я понимаю, что такой прототипчик можно накидать за час-полтора. Почему же тогда так неторопливо? Ну, смотрите название канала. Я попутно объясняю, что я делаю, не стесняясь, если надо, прочитать в меру занудную лекцию на тему "что это за идея?" или "почему именно так?".

Плюс к тому, дзен постоянного рефакторинга. Например, на третьем стриме мне предлагали решить проблему просто передвинув парочку строчек в другое место, положившись на нетривиальное предположение. Но вместо этого, я потратил лишних минут 30-40 на то, чтобы отрефакторить "по фэн-шую" и нисколь об этом не жалею.

Но ничего страшного. Когда у меня кончатся вещи, которые мне прям вот срочно надо объяснить, дело должно пойти чуть быстрее. Хотя кого я обманываю, такие вещи не кончаются, если есть кому слушать =)

Пока план такой:

  • Подшлифовать перетаскивание камеры
  • Сделать столкновения с минами
  • Добавить стрельбу (уничтожающую мины)
  • Добавить хит-пойнты всем действующим лицам
  • Добавить врагов, играющих в догонялки с игроком
  • Добавить стены и "непроникающие" столкновения

А где это всё?

Ну-с, по порядку: канал на ютубе, где уже есть три стрима по 2-3 часа каждый.

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

Репозиторий на гит-хабе:

Каждый коммит или сделан на стриме или имеет комментарий по поводу того, как и зачем он появился. И у каждого коммита есть комментарий с ссылкой на видео (с тайм-кодом!).

Дискорд-сервер:

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

Паблик вконтакте:

Да, я ещё завёл и паблик вконтакте. Там я выкладываю ссылки на видео. После того, как поработаю над описанием. И оттуда меня можно репостить. И ради этого я, возможно, даже буду выкладывать туда что-то ещё, чего не будет в других местах.

А теперь важный вопрос уже к читателям/зрителям

Как часто мне стоит клепать такие посты с промежуточными итогами?
Хоть после каждого стрима
Раз в неделю
Раз в две недели
Раз в месяц
Ещё реже
Показать результаты
Переголосовать
Проголосовать

И последнее:

Следующий стрим в понедельник 11 марта в 21:00 по Москве. Залетайте на канал, за час "до" должна будет прилететь уведомляшка. Буду рад всех видеть. Кстати, кто смотрел, поделитесь, пожалуйста, впечатлениями в комментариях. Мне самому интересно, как это всё со стороны выглядит.

Материал опубликован пользователем. Нажмите кнопку «Написать», чтобы поделиться мнением или рассказать о своём проекте.

Написать
{ "author_name": "chelovekbeznika", "author_type": "self", "tags": [], "comments": 15, "likes": 25, "favorites": 33, "is_advertisement": false, "subsite_label": "gamedev", "id": 42369, "is_wide": false, "is_ugc": true, "date": "Sun, 10 Mar 2019 11:40:55 +0300" }
{ "id": 42369, "author_id": 105160, "diff_limit": 1000, "urls": {"diff":"\/comments\/42369\/get","add":"\/comments\/42369\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/42369"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64954 }

15 комментариев 15 комм.

Популярные

По порядку

Написать комментарий...
3

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

Ответить
0

Интересная идея и возможно даже подпишусь в дальнейшем,успехов

Ответить
0

Смотрю по часу-полтора перед компом, повторяю, изучаю. Лайкаю. Стримы очень длинные, потом на следующий день досматриваю. Не хватает меня на 3 часа.

Ответить
0

Стрим мне был интересен, не смотря на то, что с MonoGame знаком. Я бы подумал еще над форматом, пока есть моменты, которые вводят в ступор: сколько-то минут потратить на код, от которого потом ничего не останется; очень часто было, когда ничего не происходит (автор писал на бумажке или просто делал рефакторинг) и ты, как зритель, ждешь, — ну в общем есть то, что не подготовленного зрителя может спугнуть.

Ответить
0

Написать идеальный код сразу получается чуть реже, чем никогда. А постоянный рефакторинг необходимая часть рабочего процесса. Иначе потом всё потонет в говнокоде. Можно было бы сначала писать код чуть получше, может быть, но тогда бы пришлось сидеть пол-стрима с ручкой и бумажкой, занимаясь предварительным планированием.

Легенды гласят, что подробнейшее ТЗ позволяет переписывать код меньше, но это не спасение. Потому что даже самое подробнейшее и точнейшее ТЗ имеет свойство со временем меняться, так как по ходу разработки выплывает множество нюансов. Я не составлял ТЗ, так как не умею это делать. Серьёзно, это отдельная профессия, о которой я знаю только самые азы и ничего больше.

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

Ответить
0

Я не преуменьшаю значения рефакторинга, это важно и часто необходимо, но вопрос состоял в «поделиться впечатлениями», что и делаю. Например, мне знаком паттерн с выделением строк в константы (CommonSpriteName, как было в последним стриме), но не уверен, что это было понятно всем зрителям, т.к. часто рефакторинг не объяснялся. (Тем не менее ты часто спрашивал зрителей, все ли понятно.) Еще пример с передачей Game в конструктор GameObject, которую сначала написали, потом убрали, так её можно было оставить, сослаться на архитектурное решение, мол все игровые объекты имеет указатель на игру, что уменьшило бы рефакторинг. Еще прям очень часто перетаскивался код с отрисовкой.

Ответить
0

Всё верно говоришь, но на счёт того, что код с отрисовкой часто туда-сюда таскался отвечу. Он перетаскивался туда-сюда, потому что с самого начала был не на своём месте. То есть, один объект отвечал за передвижения тушки игрока и за отрисовку. А это разные вещи, которые меняются по разным причинам. То бишь, там с самого начала был нарушен Single Responsibility Principle, о чём, я по-моему, мельком разок упомянул, но внимания не стал акцентировать. Почему я не разнёс это с самого начала? Потому что не хотел усложнять программу раньше времени без острой на то необходимости. Зато когда я понял, что сейчас мне точно понадобится класс Camera, код отрисовки спрайтов окончательно обрёл свой дом. Ну, на ближайшие три-четыре стрима точно =)

Ответить
0

Я думаю что это делается для наглядного "Как делать не надо". А потом автор ещё рассказывает как это правильно вынести по феншую, и поясняет почему это нужно сделать.

Тут всё таки есть разница - когда человек просто показывает как кодить на си шарпе, и когда человек показывает рабочий процесс создания приложения по канонам ООП. Люди которые не шарят в программировании - вряд ли заинтересуются и смогут оценить то, что делает автор (им бы попроще - посмотреть, как просто писать код).

Ответить
0

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

Ответить
0

Да, ты вроде как понял причины, я превращаю изначальную версию в конфетку в том числе и в образовательных целях. Но есть и ещё одна причина: не надо долго думать и тупить, как сделать правильно. Всё-таки, если тупить в прямом эфире, зрители разбегутся меньше, чем за пять минут. А вот когда накидаешь что-то более-менее рабочее, сразу становится в разы проще увидеть, как это сделать правильно.

Ответить
0

Ну в целом мне понравилось, что действительно объясняешь ООП и всё такое. То есть я программирование чуток шарю (и си шарп немного знаю), поэтому мне особенно интересно именно когда ты из своего опыта какие-то фишки рассказываешь. Я думаю, что как раз две вещи особенно ценны на твоих стримах: это показать и объяснить как по заповедям ООП выстраивать программу, и второе - это вещи которые ты рассказываешь исходя из своего опыта (например мне понравилось, как ты рассказал про Single и float - в чём техническая разница, и почему ты юзаешь Single, а не float ).

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

Ответить
0

Технической разницы, кстати, между Single и float вообще никакой. Разница в том, как в итоге будет читаться код.

Ответить
0

Сраный мать его си шарп

Ответить
0

а чем шарп плох?

Ответить
0

Да у меня просто вьетнамские флешбеки с него

Ответить
0

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fizc" } } }, { "id": 4, "label": "240х200_mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "flbq" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fjog" } } }, { "id": 10, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "clmf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-250597-0", "render_to": "inpage_VI-250597-0-1134314964", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=clmf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Плашка на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudo", "p2": "ftjf" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fzvc" } } } ]
Невероятно! Skyrim портировали на...
Подписаться на push-уведомления