Обновить

ASCII Sandbox для красивого рассыпания в игре // Как сделано

Для того чтобы спрайты, боссы и другие объекты в игре красиво рассыпались, я сделал простой ASCII Sandbox движок. В отличие от самой игры, где символы могут рисоваться в произвольных координатах, ячейки в sandbox‑е строго выровнены по сетке. Это дает прикольный визуальный эффект. Алгоритм очень простой — вот схема:

─┼─┼─┼─┼─┼─┼─┼─┼─
│ │ │ │@│ │ │ │
─┼─┼─┼─┼─┼─┼─┼─┼─
│ │4│2│1│3│5│ │
─┼─┼─┼─┼─┼─┼─┼─┼─

А. Обходим все ячейки сетки снизу вверх (если гравитация направлена вниз).

Б. Если в ячейке есть символ, и он не в полете, то пытаемся его уронить.

В. Сначала проверяем ячейку снизу (1), если пустая — запускаем символ в полет в нее.

Г. Если снизу занято, то проверяем диагональные ячейки (2) и (3). Если обе пустые, то выбираем случайно. Запускаем символ в полет.

Д. Sandbox у меня скользкий, т.ч. символы могут скатиться и под большим углом. Поэтому проверяем еще и соседние к диагональным ячейки (4) и (5). Если там пусто, то запускаем символ в полет, как в предыдущем пункте.

Этого достаточно — символы сыпяться. Для красоты я добавил еще две штуки: ускорение и саморазрушение.

Если символ без задержек летит по ячейкам сетки вниз, то было бы красиво сделать движение с ускорением. Сделать это просто — нужно только накапливать для каждого символа время непрерывного полета. Наткнулся на другой символ — обнуляем время и ускоряемся заново.

Еще одна штука — саморазрушение. Когда спрайт помещается в sandbox, то в случае, если снизу пустые ячейки, он летит целиком. Это иногда не так эффектно. Поэтому я сделал параметр саморазрушения. Даже если снизу пустота, то отдельные частички‑символы спрайта все равно начинают взаимодействовать друг с другом. На видео я показал сравнение разных степеней саморазрушения.

Как вам эффект? Буду рад, если вам понравился стиль и вы решите поддержите мой проект на Steam страничке игры.

Теги:
+5
Комментарии0

Публикации