Важное замечание! Данное задание предназначено для соискателей, отправивших резюме в компанию Ants Games.
Контакты
для отправки решенного задания и вопросов
EMail
Telegram
Задание: создать форк репозитория и на основе предоставленных материалов спроектировать и реализовать классы “Кнопка”, “Кнопка с поддержкой долгого нажатия”, а также тестовую среду для демонстрации работы классов. Постарайтесь приблизиться к тому, как бы вы выполняли рабочую задачу, все необязательные элементы, например (если предполагается) индикация состояния (Label с текущим состоянием) не должны быть частью классов "Кнопка или кнопка с долгим нажатием" и находиться в коде тестовой среды. Результат представить в виде ссылки на репозиторий на GitHub, либо другом предпочитаемом сервисе(любой git хостинг, позволяющий скачать репозиторий без регистрации аккаунта).
Требования к классу: Классы кнопка и кнопка с долгим нажатием должны соответствовать следующим требованиям.
Основные свойства кнопки:
-
Кнопка должна иметь Safe и Expand zone, которые устанавливаются с помощью функции сеттера. Не могут быть меньше contentSize кнопки. При попытка задать размер областей меньше contentSize кнопки - такой вызов игнорируется, размер области устанавливается равным contentSize кнопки.
- Expand - область срабатывания, если тап попадает в нее, кнопка обрабатывает нажатие.
- Safe - область в которой кнопка не теряет тач, при этом ее вид меняется. При возвращении тача обратно кнопка переходит обратно в состояние “нажата”. Тап по safezone не вызывает срабатывание
- Иллюстрация Safe и Expand zone
-
Наличие состояний
- Idle - Обычное состояние кнопки
- Pushed - кнопка нажата, тач внутри кнопки
- Dragout - кнопка была нажата, тач вне кнопки, но внутри safe zone
-
Дочерние элементы
- Кнопка должна иметь функционал добавления в нее дочерних элементов, видимость которых привязана к одному или нескольким состояниям, если элемент не привязан к какому-то состоянию, его видимость не меняется.
-
Реакция на нажатие
- При завершении тача, если кнопка находится в состоянии Pushed/LongPush, происходит отправка события cocos2d::CustomEvent и вызов функтора, если таковой задан. Устанавливается функтор вызовом функции сеттера.
Возможный граф состояний, совмещенный для двух классов:
Требования к тестовой среде: Сцена с несколькими кнопками демонстрирующими работу реализованного класса: нажатие, нажатие с движением касания по кнопке, реакция на долгое нажатие
Критерии оценки решения
- Кнопка корректно обрабатывает нажатия при (2D) трансформации (перемещение, поворот, масштабирование), а также при трансформации элементов кнопки.
- Кнопка изменяет видимость своих компонентов при смене состояния
- При отпускании отправляется событие, которое позволяет идентифицировать кнопку-отправитель и состояние из которого произошла отправка события
- При отпускании вызывается callback, если таковой был
- Удаление кнопки со сцены не вызывает побочные эффекты (например segfault/access violation)
- Также будет оцениваться потенциальная "стоимость" применения разработанного класса. Говоря проще - оптимальность работы с ресурсами и отсутствие лишних операций.
- Отсутствие посторонних бинарных файлов в репозитории
- Соблюдение общего стиля форматирования кода. Также важно
- Вы можете использовать любую IDE и OS. Однако, основная разработка ведется в Visual Studio под Windows, крайне желательно убедиться, что проект собирается из-под VS с использованием платформы v141(VS2017) и выше.
P.S.: И конечно же, написанный класс использующий чужой код или cocos2d::ui::Button не принимается.
P.P.S.: Повторюсь, что несмотря на то, что данное задание опубликовано в свободном доступе, его выполнение не дает каких-либо гарантий с нашей стороны. Если вы нашли это задание в открытом источнике (github репозиторий RttnKttnAnts или его форки) и не отправляли резюме на рассмотрение, предварительно свяжитесь с нами, чтобы обсудить возможность сотрудничества. В противном случае, выполнение задания может не иметь результата.