Добавим ещё один шаблон в нашу копилку и посмотрим, что из себя представляет шаблон “Команда”.
Управление - это неотъемлемая часть игры. Исключите управление и в лучшем случае игра превратится в кино. Хотя в последнее время даже кино начинает предоставлять возможность управления происходящим на экране, например “Чёрное зеркало: Брандашмыг” или “Мозаика” Стивена Содерберга. Базовое создание управления в игре, как и практически любая вещь в программировании, не представляет из себя чего-то сложного. Всего лишь нужно вставить вызов функции, которая проверяет клик по левой кнопке мышки и вот вы настроили выстрел. Потом вызвали другую функцию и, по нажатию кнопки пробел на клавиатуре, ваш персонаж уже прыгает. Ещё дюжина вызовов размазанных по всему коду и можно выходить в продакшн. Добавить в игру настройку действий? В iOs появилась возможность использования Xbox/DualShock контроллеров и хорошо бы добавить их поддержку? Игру нужно портировать на консоль? Нет мы так не договаривались. В общем, понятно, что простая задача всегда может превратиться в сложную из-за небольшого изменения требований, а сгладить рост сложности, в случае с настройкой управления, поможет шаблон “Команда”.
Официальное описание шаблона гласит, что команда представляет собой объект-обёртку над вызовом. Этот подход позволяет легко передавать команды между объектами, перенастраивать их поведение, а также создавать из них последовательности. Для более глубокого знакомства с теоретической частью можно обратиться к этой главе из книги Роберта Нистрома или этой статье.
По своей сути и базовой реализации команды очень похожи на стратегии, которые мы рассмотрели в прошлой статье цикла о шаблонах, но их использование различается масштабом и областью применения. Команда превращает разнородные действия в объекты, в результате чего появляется свобода действия с ними, например, отмена операции. Стратегия же обычно описывает изменение внутреннего поведения конкретной сущности.
Объекты команд позволяют легко создавать из них последовательности, что можно использовать для поддержки отмены/возврата действий по шагам, всё, что вам нужно, это дополнить объект команды данными об обратных действиях. Это не очень применимо к экшен играм, однако, может пригодиться в пошаговой стратегии или создании редактора для настроек каких-либо игровых элементов.
В качестве практического примера воспользуемся наработками из предыдущей статьи о стратегиях и добавим управление магом, применив шаблон команд. Создадим 3 команды: использование заклинания, переключение между заклинаниями, а также создание противника.
|
|
|
|
|
|
|
|
|
|
Как несложно заметить действия были абстрагированы от вызывающего их кода, что упростит создание настроек или расширение методов управления.
Мы живём в такое время, когда мобильные устройства, помимо стандартного и зачастую неудобного управления через тачскир, получают поддержку полноценных игровых(и не только) контроллеров, да и выпуск игры редко происходит только на одной платформе. А настройка управления всегда была элементом проявления дружелюбности к игроку. Для облегчения борьбы с этими вызовами вполне подходит рассмотренный нами шаблон команд. Однако не забывайте, что злоупотребление шаблонами может превратить ваш код в лазанью. Пока! =)