Mainu Studio
Разработка Banana Game | Форма, физика и устойчивость
Изгиб банана должен влиять на игру, но не делать всю горку нестабильной. Именно это отличало задачу от обычных круглых фруктов.
Почему одного круга оказалось мало
Круглый коллайдер дёшев и предсказуем, но большой круг вокруг банана закрывает внутреннюю пустоту: сосед кажется висящим в воздухе. Маленький круг позволяет проходить сквозь кончики.
Поэтому форма столкновения следует изгибу и оставляет внутреннее пространство открытым. Виноград тоже должен сталкиваться так, как подсказывает силуэт. Но обводить каждый пиксель не стоит: мелкие выступы цепляют соседей и вызывают дрожание. Важна узнаваемая форма без лишних зацепов.

Что проявилось под весом горки
Ранние версии были устойчивы с несколькими фруктами, но начинали дрожать, когда вес большой горки сходился в одном контакте. Результат соединения мог появиться внутри соседа, а мелкий плод — застрять в вогнутой форме. На медленном устройстве между отображаемыми кадрами происходило больше движения.
Одно лишь увеличение трения приклеивало фрукты, а упругости — подбрасывало горку. Мы сочетаем сглаженные контуры, однократное отключение исходных плодов перед созданием результата, умеренные трение и затухание, ограничения падения, вращения и скорости раздвигания пересечений.
Автоматическое соединение требует единого события
В прототипе игрок сам выбирал соприкасающуюся группу. Теперь допустимый контакт сразу вызывает соединение. Повторные сообщения о контакте и несколько рецептов за одно движение не должны расходовать один фрукт дважды.
Использованные плоды отключаются сразу, а не после анимации. Очки, жетоны, звук, изображение и физическая очистка привязаны к одному событию. Это предотвращает невидимые остаточные коллайдеры. Сначала проверяется целая особая группа, иначе сразу пара; объяснение правил учитывает этот порядок.
Одно поле 720×1280 для всех платформ
У Web, Android и Windows разные доступные области, безопасные отступы, фильтры и ввод. Отдельные раскладки раньше приводили к кнопкам, которые смещались или растягивались только на одной платформе.
Теперь опорная раскладка 720×1280 масштабируется пропорционально, а свободные поля остаются снаружи. Сенсорная область может быть больше рисунка, но центр привязан к тем же координатам. Текст и предпросмотр используют общий масштаб. Ближайший сосед чёток при целых множителях, но большинство телефонов им не соответствуют: сначала согласуем относительную геометрию, затем выбираем фильтр для типа графики.

Производительность проверяем в трудных ситуациях
Устойчивые фрукты могут спать до нового контакта; декорации и текст не нужно пересоздавать каждый кадр. Строки рейтинга и языковые предпросмотры переиспользуются, оставляя время процессора самой горке.
Проверки включают частые быстрые сбросы, соединения у крупных соседей, нагрузку на банан, паузу в движении, изменение окна и возврат из меню. Хорошее поведение пустой сцены само по себе ничего не доказывает.
Оставляем понятную непредсказуемость
Перекатывание, поворот и передача импульса создают интерес. Даже неудачный результат должен объясняться видимым контактом. Банан останется менее предсказуемым, чем круг, но прохождение насквозь, постоянное дрожание, невидимые коллайдеры и разная раскладка — ошибки, а не особенности.