Распознавание жестов, или как я стал призером GitHubGameOff
Для желающих сразу пощупать игру своими пальцами ее можно:
1. скачать на Google Play
2. поиграть на itch
3. посмотреть на GitHub
На разработку собственной системы распознавания жестов меня натолкнул doodle от google на хеллоуин 2016. Достать код распознавания жестов оттуда не получилось, поэтому я решил притворится веломастером и сделать свой велосипед.
Для распознавания жеста нужно решить две задачи:
1. отбросить избыточные данные пользовательского ввода
2. на основе полученных данных угадать, что же хотел нарисовать пользователь
Для решения первой задачи я сначала хотел использовать библиотеку paper.js. Она умеет превращать набор точек в ломанаю линию или кривую Безье. Но она требует для своей работы дополнительный canvas и возвращает результат в крайне замысловатой структуре, поэтому от нее пришлось отказатся. К счастью, добрые люди давно выложили код функции для отбрасывания "ненужных" элементов с массива точек (установка погрешности около 10 позволяет получить вполне приличные результаты).
Следующий шаг - определить, на какую фигуру похожи наши точки. Умные люди с Вашингтонского университета разработали для этого библиотеки $1 и $p (для фигур с одной и нескольких линий соответсвенно), используя метод "тучи точек". Но, как показали опыты, библиотека оказалась слишком безотказной - она не умеет определять, что жест не похож ни на один из шаблонов.
Я решил использовать более простой, но весьма эффективный метод. Программа абстрагируется от реальных координат точек и запоминает только направление движения (-1, 0, 1 по вертикали и горизонтали); если два соседних направления одинаковы, то второе отбрасывается. Уже на основании этих направлений и подготовленных шаблонов программа решает, что за жест был нарисован.
Увидев пост о начале GitHubGameOff, я решил попытать судьбу и принять участие. Т.к. тема соревнования - throwback, я решил пересмотреть геймплей PAC-MAN и адаптировать его под распознавание жестов. Единственным рабочим вариантом было следующее размещение персонажей - протагонист стоит в центре, а враги приближаются от краев экрана. Но у Пакмана нет анимации спокойствия, поэтому было принято решение перевернуть игру с ног на голову - Блинки стал протагонистом, а Пакман - антагонистом.
Игру оценили вполне положительно: среди 209 игр она заняла 3-е место в категории Геймплей, 10-е в категории Инновационность и 20-е за общее впечатление.
Спасибо за внимание) Буду рад услышать отзывы и предложения
Лига Разработчиков Видеоигр
6.6K поста22.1K подписчиков
Правила сообщества
ОБЩИЕ ПРАВИЛА:
- Уважайте чужой труд и используйте конструктивную критику
- Не занимайтесь саморекламой, пишите качественные и интересные посты
- Никакой политики
СТОИТ ПУБЛИКОВАТЬ:
- Посты о Вашей игре с историей её разработки и описанием полученного опыта
- Обучающие материалы, туториалы
- Интервью с опытными разработчиками
- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе
НЕ СТОИТ ПУБЛИКОВАТЬ:
- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры
- Посты, единственная цель которых - набор команды для разработки игры
- Посты, не относящиеся к тематике сообщества
Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.
ЗАПРЕЩЕНО:
- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции
- Выдавать чужой труд за свой
Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.
О РАЗМЕЩЕНИИ ССЫЛОК:
Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:
- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества
- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз
- Cсылка размещается в формате: "Страница игры в Steam: URL"