Machine — различия между версиями
Steps (обсуждение | вклад) (Новая страница: «'''Машина состояний''' (state machine) позволяет описывать сложное поведение игровых объектов. Д...») |
Steps (обсуждение | вклад) |
||
Строка 29: | Строка 29: | ||
В дальнейшем, чтобы не приводить скриншоты редактора состояний, мы будем описывать их при помощи списка команд и их параметров. Так, машина, созданная выше, будет иметь следующее описание: | В дальнейшем, чтобы не приводить скриншоты редактора состояний, мы будем описывать их при помощи списка команд и их параметров. Так, машина, созданная выше, будет иметь следующее описание: | ||
<pre> | <pre> | ||
− | st = "off" // состояние выключенной лампочки | + | '''st''' = "off" // состояние выключенной лампочки |
{ | { | ||
− | draw { res="lamp_off" } // рисовать картинку выключенной лампы | + | '''draw''' { res="lamp_off" } // рисовать картинку выключенной лампы |
− | click { go="on" } // при клике - идем в состояние "on" | + | '''click''' { go="on" } // при клике - идем в состояние "on" |
} | } | ||
− | st = "on" // состояние включенной лампочки | + | '''st''' = "on" // состояние включенной лампочки |
{ | { | ||
− | draw { res="lamp_on" } // рисовать картинку включенной лампы | + | '''draw''' { res="lamp_on" } // рисовать картинку включенной лампы |
− | wait { t=3000 go="off" } // через 3 секунды возвращаемся в "off" | + | '''wait''' { t=3000 go="off" } // через 3 секунды возвращаемся в "off" |
} | } | ||
</pre> | </pre> |
Версия 14:53, 9 февраля 2012
Машина состояний (state machine) позволяет описывать сложное поведение игровых объектов. Для машин с типовым набором состояний и поведений вводятся отдельные типы объектов. Например, кнопка, по своей сути, является машиной состояний.
Логика поведения машины разбивается на отдельные узлы (состояния). Машина всегда находится строго в одном состоянии. Переход из одного состояния в другое происходит либо в результате внешнего воздействия на машину, либо в результате окончания некоторых процессов протекающих внутри неё
Введение
Рассмотрим пример простой машины состояний. Пусть объект (лампочка) находится в состоянии "off". При клике на него мышкой, он переходит в состояние "on", в котором находится 3000 ms, через которые возвращается в состояние "off". В каждом состоянии рисуется своя картинка.
Для создания такой машины, в редакторе, в панеле свойств необходимо выбрать тип объекта "machine", после чего нажать на многоточие в последнем свойстве "states". Появится окно редактирования свойств машины:
Нажав дважды кнопку "Добавить состояние", мы получим два списка со свойствами этих состояний. Зададим им имена, редактируя первое поля "имя". Далее, на имени первого состояния нажимаем правую кнопку мыши, и из списка команд выбираем первую - "draw". Она появится в списке свойств данного состояния. Кликнув на многоточие в поле ввода "draw", получим ещё одно окно со списком возможных параметров этой команды. Помечая галочкой параметр "res", и нажимая кнопку "Ok", мы увидим его в окне свойств состояния. Действуя аналогичным образом, формируем окно описания состояний в следующем виде:
То, что у нас получилось, можно изобразить в виде следующего графа машины состояний:
Кружки обозначают состояния (у нас их два). Стрелки - переходы между состояниями. Нижняя стрелка - это переход в результате внешнего воздействия (клика мышкой на машину). В окне редактирования состояний это воздействие описывается командой click с единственным параметром go, обозначающим в какое состояние необходимо перейти. Верхняя стрелка - переход в результате процессов внутри состояния on. В данном случае, процесс один - wait. Начав работать, эта команда ждет время t=3000 миллисекунд (3 секунды), а затем выполняет обратный переход в соответствии с параметром go="off".
В каждом состоянии рисуются различные картинки для отображения машины. Этим заведуют команды draw, в единственный параметр которых res, перетаскивается соответствующая картинка из редактора ресурсов.
Машина состояний всегда начинает функционировать в каком-то определенном состоянии. По умолчанию им является первое состояние в редакторе состояний. Можно его переопределить, задав стартовое состояние в общих свойствах объекта (поле state).
В дальнейшем, чтобы не приводить скриншоты редактора состояний, мы будем описывать их при помощи списка команд и их параметров. Так, машина, созданная выше, будет иметь следующее описание:
'''st''' = "off" // состояние выключенной лампочки { '''draw''' { res="lamp_off" } // рисовать картинку выключенной лампы '''click''' { go="on" } // при клике - идем в состояние "on" } '''st''' = "on" // состояние включенной лампочки { '''draw''' { res="lamp_on" } // рисовать картинку включенной лампы '''wait''' { t=3000 go="off" } // через 3 секунды возвращаемся в "off" }
Фигурные скобки { ... } после имени команд ограничивают список параметров команды. Состояние, начинающееся с записи st="имя состояния", ограничивает фигурными скобками все команды этого состояния. После двух слешей идет пояснение (комментарий).