Инди chelovekbeznika
1 150

«Объясняю каждую строчку» — отчёт за май

В закладки
Аудио

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

В предыдущих сериях

Если вдруг кто-то не понял, что происходит:

Вот тут я объявил конкурс.

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

Ещё чуть-чуть про тот самый конкурс

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

Дело в том, что у меня нет GameObject в классическом его понимании. Был класс, который так назывался, но я его использовал исключительно для того, чтобы переиспользовать код. О том, что такая сущность есть, никто за пределами парочки классов не знает.

Тот, кто рисует спрайты, получает себе на вход пачку объектов, реализующий интерфейс IDisplayble. Те, кто проверяют столкновения работают с объектами класса ICollidable. О том, что есть сущность, реализующая эти интерфейсы одновременно, они не в курсе. Тут используются две буквы из SOLID. D - for Dependency Inversion (мы не зависим от конкретных реализаций) и I - for Interface Segregation (один условный интерфейс IGameObject разделён на IDisplayble и ICollidable, и тот, кто рисует спрайты ничего не знает о других свойствах рисуемого объекта).

Так что у меня был класс, который назывался GameObject, но не было нужды в столь универсальном, как можно было подумать из названия, классе. Ведь роль универсального класса выполняют несколько интерфейсов, описывающие разные свойства игры. Самое забавное, что буквально на прошлом неделе это окупилось. У меня теперь есть разные ICollidable: Wall - наследуtтся от Actor (бывший GameObject) и представляют из себя анимированный спрайт, сквозь который нельзя проходить, и TileWall, который не содержит в себе ничего, кроме хитбокса, а строится из ландшафта, хранимого в нарисованном в Tiled уровне. Внутри эти объекты абсолютно разные и не имеют почти ничего общего. У них разные способы создания, разная реализация, разная сложность. Но моей игре норм. Отвечающий за столкновение класс знает, что у этой штуки есть хит-бокс, сквозь который нельзя проходить, а остальное ему до лампочки.

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

Что изменилось за май?

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

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

Так же у нас появился интерфейс. Где за три стрима я добавил полосочку здоровья игроку, время в игре и полосочки здоровья врагам.

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

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

Приходи к нам на канал, ведь у нас есть:

  • Взрывающийся вертолёт
  • Модные тайлы, которые рисуются в Tiled (он клёвый)
  • Злые глазики, шпарящие самонаводящимися пулями
  • Пыщь-пыщь! Прямо как в 1979 году!
  • Юнит-тесты
  • Неуязвимые мины. Оп! Снова уязвимые. Оп! Снова неуязвимые. Они ещё так "птуньк" делают
  • Visual Studio 2017 Community Edition с чёрным фоном, выглядит как в кино про хакеров
  • Заросший чувак, бормочущий что-то себе под нос, иногда слегка небритый, выглядит как в кино про хакеров
  • Почему этот юнит-тест не проходит?!
  • Пиу-пиу-пиу! Прямо как в 1979 году!
  • Картинка с пони (рисовал не я)
  • Почему этот юнит-тест проходит?!
  • Бдыщчь! Прямо как в 1979 году!
  • Цветовая палитра NES в спрайтах, потому что я делаю вид, что у меня стиль, а не руки из жопы (делается с помощью программы aserprite)
  • Классы, интерфейсы и ещё какие-то умные слова

Ссылочки

Канал

Плей-лист с прошедшими стримами

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

Сюда я долблю уведомляшками о грядущем эфире. Можно там у меня что-нибудь спрашивать.

К каждому коммиту прилагается ссылка на видео

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

Написать
{ "author_name": "chelovekbeznika", "author_type": "self", "tags": [], "comments": 8, "likes": 42, "favorites": 23, "is_advertisement": false, "subsite_label": "indie", "id": 52737, "is_wide": false, "is_ugc": true, "date": "Mon, 03 Jun 2019 03:32:10 +0300" }
{ "id": 52737, "author_id": 105160, "diff_limit": 1000, "urls": {"diff":"\/comments\/52737\/get","add":"\/comments\/52737\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/52737"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 64960, "last_count_and_date": null }
8 комментариев

Популярные

По порядку

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

«... постоянные зрители (три с половиной человека, ага)...»

Ответить
6

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

Ответить
0

Я вот недавно решил научиться создавать папку..

Ответить
4

Столько ссылок я ещё не видел ни в одной статье, мне кажется...

Ответить
3

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

Ответить
1

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

Ответить
0

Мля, чел талонтлив, жаль что жизнь только одна и нет времени окунуться во все это.

Мужик, зачем тебе это все ? Используй юнити или арил.

Ответить
0

Или Godot - он тоже клёвый. В следующий раз так и сделаю. А пока что так уже.

Ответить
0

Прямой эфир

{ "remaining": "WzAsMSwyLDMsNCw1LDYsNyw4LDld" } [ { "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" } } } ]
EA анонсировала DLC для DLC
для аддона для спин-оффа
Подписаться на push-уведомления