Конечный автомат
Цель конечного автомата - создать группу разных уникальных режимов, в которых может работать программа. Эти состояния "конечны" в том смысле, что всегда только одно из этих состояний может быть активно или запущено в игре в определенный момент времени. Автомат состояний - это конструкция, созданная для обеспечения того, что всегда работает только одно состояние и для плавного перехода между состояниями. Переходы между состояниями происходят с помощью остановки текущего состояния (позволяя ему уничтожить данные или сделать сохранение в последний момент перед его остановкой) и последующего его отключения. После того, как старое состояние остановлено, запускается новое состояние , позволяя ему пройти этап настройки. Затем это новое состояние запустит его метод обновления в тандеме с обновлением игры, пока оно не остановится для перехода.
Рабочий день - это хороший пример различных состояний и переходов между ними. Много людей начинают их рабочий день дома, где они просыпаются и занимаются работой по дому. Это можно считать состоянием "приготовление". Дальше будет поездка, чаще всего на автомобиле, что является состоянием "вождение". Потом будет сама работа и она ассоциируется с состоянием "работа". Каждое из этих состояний не пересекается, по крайней мере не в нашем идеализированном мире. Когда сотрудник едет, он просто едет. Очевидно есть промежуток времени между каждым состоянием, например время, которое работник тратит чтобы выйти из дома и сесть в машину. Двери должны открываться, из домов нужно выходить, ключи должны находиться. Эти переходы состоят из двух частей: окончание старого состояния и начало нового. В случае перехода в связывающее состояние, дом должен быть покинут и заперт, закрывая состояние "подготовки". Далее нужно открыть машину, сесть в нее и завести для запуска состояния "вождения". Комбинация методов отключения и настройки становится тем переходом между более сложными циклами обновления состояния.
Состояния Phaser работают точно так же. После того, как запущено конкретное состояние, его цикл обновления будет управлять всей игрой. Игра имеет несколько методов для смены между состояниями, которые будут автоматически вызывать функцию на текущем состоянии, чтобы правильно завершить работу состояния и затем создать и настроить новое состояние для его запуска.
Другое замечательное место, где можно увидеть конечный автомат в действии - это анимации внутри игр, где анимация должна быть завершена до того, как другая сможет начаться. Файтинги - отличный пример применения конечного автомата. Когда управляешь персонажем файтинга, только одна анимация атаки может быть активна в данный момент. После того, как вызвана и начата анимация атаки персонажа, она будет полностью воспроизведена до конца и затем, как только состояние атаки закончится, будет переход. Переход может быть в состояние бездействия, или в случае комбо, может быть другая анимация, которая будет длиться столько, сколько верна цепочка нажатия кнопок для комбо. Запрет на потенциальные передвижения, основанные на текущем состоянии объекта это еще одна крутая вещь для использования конечного автомата и это может быть применено для замечательного эффекта в ваших играх с помощью небольшой работы и вниманием над этим.