«Объясняю каждую строчку» — отчёт за май
Ну, всем привет. Меня почти перестали смотреть, я всерьёз задумался о том, чтобы начать разговаривать с плюшевой игрушкой, постоянные зрители (три с половиной человека, ага) заняты сессией и экзаменами. Но зато я всё ещё делаю видеоигру на стримах. Вот и очередной отчёт подъехал!
В предыдущих сериях
Если вдруг кто-то не понял, что происходит:
Вот тут я объявил конкурс.
А вот тут подвёл его итоги. Если кто-то из победителей вдруг захочет ещё забрать призы, говорите куда высылать.
Ещё чуть-чуть про тот самый конкурс
Для тех, кто следил за конкурсом или моими потугами хотелось бы прояснить один момент, который надо было обозначить с самого начала, потому что был важен, но неочевиден для всех, включая меня, к сожалению.
Дело в том, что у меня нет 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)
- Классы, интерфейсы и ещё какие-то умные слова
Ссылочки
Канал
Плей-лист с прошедшими стримами
Паблик вконтакте
Сюда я долблю уведомляшками о грядущем эфире. Можно там у меня что-нибудь спрашивать.
К каждому коммиту прилагается ссылка на видео