Checkbox как машина состояний — различия между версиями

Материал из wiki.appsalutecreator.com
Перейти к: навигация, поиск
(Проектирование машины)
(Проектирование машины)
Строка 51: Строка 51:
 
=== Проектирование машины ===
 
=== Проектирование машины ===
  
Перейдем теперь от нудной теории к веселой практике. Посмотрим внимательно на поведение головы слоненка, которая является чекбоксом. На самом деле это типичная машина состояний, которая имеет два состояния. Назовём их '''left''' и '''right''' по направлению головы слонёнка. Сначала слоненок находится в состоянии  left (и смотрит влево). Когда мы кликаем в голову, машина переходит в новое состояние right (голова поворачивается вправо). Это поведение жестко запрограммированно внутри объекта checkbox. Попробуем добиться того же эффекта, используя универсальный игровой объект "машина состояний".  
+
Перейдем теперь от нудной теории к веселой практике. Посмотрим внимательно на поведение головы слоненка, которая является чекбоксом. На самом деле это типичная машина состояний с двумя состояниями. Назовём их '''left''' и '''right''' по направлению ориентации головы слонёнка. Сначала слоненок находится в состоянии  left (смотрит влево). Когда мы кликаем в голову, машина переходит в новое состояние right (голова поворачивается вправо). Это поведение жестко запрограммированно внутри объекта checkbox. Попробуем добиться того же эффекта, используя универсальный игровой объект "машина состояний".  
  
Прежде всего не поленимся нарисовать граф состояний и переходов между ними:
+
Прежде всего не поленимся нарисовать весёлый граф состояний и переходов между ними:
  
 
[[файл:lesson_3_states.png|center]]
 
[[файл:lesson_3_states.png|center]]

Версия 21:27, 10 января 2013

Урок 2 << Оглавление >> Урок 4

Цель: изучить понятие машины состояний на примере объекта Checkbox

Задачи:

  • Cоздать новый экран и сцену для этого урока.
  • При помощи объекта Checkbox заставит слонёнка кивать головой.
  • Воспроизвести этого же слонёнка при помощи машины состояний


Checkbox

Начнём, как обычно, урок с открытия проекта lessons. В нём добавим новый экран lesson_3 со сценой stg_main, так как это было описано в предыдущем уроке. Поместим из редактора ресурсов на сцену любой фон на выбор из папки этого урока или предыдущего. Для примера далее используется "лунный пейзаж" (картинка bg).

Поверх фона перетащите из редактора ресурсов тело слонёнка (ресурс body) и затем его голову head1. Расположите их так, чтобы получился примерно целый слонёнок. Переименуйте эти 2 объекта в elephant_body и elephant_head_chk (помним о необходимости осмысленных имен в объектах?).

Lesson 3 chk.png

Зайдем в свойство головы elephant_head_chk и изменим её тип на checkbox. Раскроем треугольнички возле свойств "не отмечена (внешний вид)" и "не отмечена (внешний вид)". Разместим поверх окна редактор ресурсов и перетащим в поле up первой группы (не отмечена) картинку head_1, а в такое же поле второй группы (отмечена) картинку head_2.

Сохраняем проект и запускаем вьювер. При клике на голову слонёнка она должна туда-сюда поворачиваться.

Обычно чекбоксы (сheckbox) это такие квадратики в которых ставят или убирают галочку. Конечно и в игровом приложении может понадобиться такой внешний вид чекбокса. В этом случае нужно будет подготовить соответствующие картинки. Однако многие простые игровые объекты типа подобной головы могут находиться в двух состояниях (выбран, не выбран).

Машины состояний

Немного теории

Машина состояний (state machine) является универсальным инструментом для программирования в редакторе сцен сложного поведения объектов. Логика поведения машины состояний разбивается на отдельные узлы (состояния). Объект всегда находится строго в одном состоянии. Переход из одного состояния в другое происходит либо в результате внешнего воздействия на объект, либо в результате окончания некоторых процессов протекающих внутри объекта.

Любая машина состояний может быть изображена в виде графа с кружочками и стрелками. Настоятельно рекомендуется рисовать такие графы в процессе проектирования машины, а лишь затем переходить к их описанию в окне редактора состояний. У машины всегда активно строго одно состояние (ниже это изображено на левом рисунке темным кружком):

Def states.png

Машина состояний не обладает памятью. Это означает, что для анализа того, что произойдет в данном состоянии, неважно как мы в него попали, и какова была предыстория переходов. Важно, только, что мы находимся в этом состоянии. Такое отсутствие памяти упрощает анализ логики машины, так как каждый раз мы концентрируемся на одном конкретном состоянии, а всю логику работы разбиваем на отдельные кирпичики-состояния.

Выше на правом рисунке изображено некоторое состояние. При входе в него, происходит инициализация состояния. Если на объект оказываются внешние воздействия, то он может покинуть состояние. Наконец, внутри состояния могут работать различные процессы.

Проектирование машины

Перейдем теперь от нудной теории к веселой практике. Посмотрим внимательно на поведение головы слоненка, которая является чекбоксом. На самом деле это типичная машина состояний с двумя состояниями. Назовём их left и right по направлению ориентации головы слонёнка. Сначала слоненок находится в состоянии left (смотрит влево). Когда мы кликаем в голову, машина переходит в новое состояние right (голова поворачивается вправо). Это поведение жестко запрограммированно внутри объекта checkbox. Попробуем добиться того же эффекта, используя универсальный игровой объект "машина состояний".

Прежде всего не поленимся нарисовать весёлый граф состояний и переходов между ними:

Lesson 3 states.png

Теперь, когда на бумаге всё стало ясно :), необходимо эту машину создать в редакторе.

Создание машины

Создание машины

Упражнения


Урок 2 << Оглавление >> Урок 4