My:Abs — различия между версиями
WikiSysop (обсуждение | вклад) (→Условия перехода) |
WikiSysop (обсуждение | вклад) (→Объект : Машина состояний) |
||
Строка 5: | Строка 5: | ||
для каждого состояния объекта, внутри которых описаны разделы: | для каждого состояния объекта, внутри которых описаны разделы: | ||
* '''init''' - что делать при инициализации состояния | * '''init''' - что делать при инициализации состояния | ||
+ | * '''draw''' - как рисовать объект в этом состоянии | ||
* '''click''' - что делать при клике | * '''click''' - что делать при клике | ||
* '''timer''' - как обрабатывать таймерную функцию | * '''timer''' - как обрабатывать таймерную функцию | ||
Строка 15: | Строка 16: | ||
<st id="wait"> <!-- ждем клика --> | <st id="wait"> <!-- ждем клика --> | ||
− | < | + | <draw res="101" /> <!-- рисовать граф.ресурс номер 101 --> |
<click go="run" /> <!-- при клике меняем состояние на play --> | <click go="run" /> <!-- при клике меняем состояние на play --> | ||
</st> | </st> | ||
<st id="run"> <!-- реакция на клик --> | <st id="run"> <!-- реакция на клик --> | ||
− | < | + | <draw res="102" /> <!-- рисовать граф.ресурс номер 102 --> |
<timer go="wait" tm="3000"/> <!-- через время tm переходим в wait --> | <timer go="wait" tm="3000"/> <!-- через время tm переходим в wait --> | ||
</st> | </st> | ||
Строка 52: | Строка 53: | ||
Т.е. при клике произойдет переход в состояние "run", если объект 2 находится в состоянии "show" '''или''' объект 3 в состоянии "play". | Т.е. при клике произойдет переход в состояние "run", если объект 2 находится в состоянии "show" '''или''' объект 3 в состоянии "play". | ||
− | === | + | === Инициализация состояния === |
− | + | При первом попадании в состояние можно установить те или иные параметры объекта. | |
+ | Например, его начальное положение в этом состоянии: | ||
<pre class="brush:xml; gutter: false;"> | <pre class="brush:xml; gutter: false;"> | ||
− | < | + | <init x="100" y="0"/> |
− | + | </pre> | |
− | + | ||
− | + | Машины состояний могут изменять состояния других объектов. Происходит это также в секции '''init''': | |
− | + | <pre class="brush:xml; gutter: false;"> | |
+ | <init> <!-- инициализация этого состояния --> | ||
+ | <set obj="2" st="show" > <!-- установить у объекта 2 состояние show --> | ||
+ | </init> | ||
</pre> | </pre> | ||
=== Задание анимации объекта === | === Задание анимации объекта === | ||
− | + | В разделе рисования происходит управление проигрыванием анимации объекта. | |
Пусть, например, различные этапы движения персонажа собраны в графическом ресурсе в прямоугольную | Пусть, например, различные этапы движения персонажа собраны в графическом ресурсе в прямоугольную | ||
таблицу (по строкам расположено движение вперед, поворот и т.п.). | таблицу (по строкам расположено движение вперед, поворот и т.п.). | ||
Тогда можно указать начальный '''с1''', конечный '''c2''' фреймы в строке таблицы '''r''' (по умолчанию r=0): | Тогда можно указать начальный '''с1''', конечный '''c2''' фреймы в строке таблицы '''r''' (по умолчанию r=0): | ||
<pre class="brush:xml; gutter: false;"> | <pre class="brush:xml; gutter: false;"> | ||
− | < | + | <draw res="101" c1="0" c2="15" r="0" /> <!-- проигрывать 16 кадров нулевой строки --> |
− | |||
− | |||
− | |||
− | |||
</pre> | </pre> | ||
+ | |||
Кроме фреймовой анимации возможно управление alpha-каналом, перемещением по сцене, вращением и т.п. | Кроме фреймовой анимации возможно управление alpha-каналом, перемещением по сцене, вращением и т.п. | ||
+ | Это осуществляется в таймерном разделе. | ||
Например, пусть объект должен переместиться в целевую точку с координатами tx,ty | Например, пусть объект должен переместиться в целевую точку с координатами tx,ty | ||
со скоростью 0.1 пиксель в ms. Увеличивая свою непрозрачность с нуля до 1. | со скоростью 0.1 пиксель в ms. Увеличивая свою непрозрачность с нуля до 1. | ||
Строка 82: | Строка 85: | ||
<pre class="brush:xml; gutter: false;"> | <pre class="brush:xml; gutter: false;"> | ||
<obj> | <obj> | ||
− | + | <timer> | |
− | + | <move tx="100" ty="200" v="0.1" /> | |
− | + | <alpha a1="0" a1="1.0" a="0.001" /> | |
− | + | </timer> | |
− | |||
− | |||
− | </ | ||
</pre> | </pre> |
Версия 12:22, 10 октября 2011
Содержание
Объект : Машина состояний
Машина состояний является универсальным объектом для программирования в редакторе сцен сложного поведения объектов. Для машин с типовым набором состояний и поведений, в дальнейшем будут вводиться отдельные объекты. В xml-файле машина состояний состоит из разделов st для каждого состояния объекта, внутри которых описаны разделы:
- init - что делать при инициализации состояния
- draw - как рисовать объект в этом состоянии
- click - что делать при клике
- timer - как обрабатывать таймерную функцию
Например, рассмотрим объект, находящийся изначально в состоянии st="wait". При клике на него мышкой, объект переходит в состояние st="run", в котором он находится 3000 ms, через которые возвращается в состояние "wait". В xml-файле сцены он описывается следующим образом:
<obj id="1" kn="sts" w="64" h="64" x="734" y="534" state="wait"> <st id="wait"> <!-- ждем клика --> <draw res="101" /> <!-- рисовать граф.ресурс номер 101 --> <click go="run" /> <!-- при клике меняем состояние на play --> </st> <st id="run"> <!-- реакция на клик --> <draw res="102" /> <!-- рисовать граф.ресурс номер 102 --> <timer go="wait" tm="3000"/> <!-- через время tm переходим в wait --> </st> </obj>
В данном состоянии некоторые событийные разделы могут отсутствовать.
Условия перехода
Разделы click и timer могут содержать дополнительные условия перехода, в зависимости от того, в каком состоянии находятся другие объекты. Например, пусть переход по клику разрешен, если объект c id=2 находится в состоянии "show" и объект с id=3 находится в состоянии "play". Тогда:
<st id="wait"> <!-- реакция на клик --> <click go="run"> <if obj="2" st="show" > <if obj="3" st="play" > </click> </st>
В данном состоянии может быть несколько событийных разделов click и timer, из которых выполняется первый, условия которого сработали:
<st id="wait"> <!-- реакция на клик --> <click go="run"> <if obj="2" st="show" > </click> <click go="run"> <if obj="3" st="play" > </click> </st>
Т.е. при клике произойдет переход в состояние "run", если объект 2 находится в состоянии "show" или объект 3 в состоянии "play".
Инициализация состояния
При первом попадании в состояние можно установить те или иные параметры объекта. Например, его начальное положение в этом состоянии:
<init x="100" y="0"/>
Машины состояний могут изменять состояния других объектов. Происходит это также в секции init:
<init> <!-- инициализация этого состояния --> <set obj="2" st="show" > <!-- установить у объекта 2 состояние show --> </init>
Задание анимации объекта
В разделе рисования происходит управление проигрыванием анимации объекта. Пусть, например, различные этапы движения персонажа собраны в графическом ресурсе в прямоугольную таблицу (по строкам расположено движение вперед, поворот и т.п.). Тогда можно указать начальный с1, конечный c2 фреймы в строке таблицы r (по умолчанию r=0):
<draw res="101" c1="0" c2="15" r="0" /> <!-- проигрывать 16 кадров нулевой строки -->
Кроме фреймовой анимации возможно управление alpha-каналом, перемещением по сцене, вращением и т.п. Это осуществляется в таймерном разделе. Например, пусть объект должен переместиться в целевую точку с координатами tx,ty со скоростью 0.1 пиксель в ms. Увеличивая свою непрозрачность с нуля до 1. Тогда функция инициализации выглядит следующим образом
<obj> <timer> <move tx="100" ty="200" v="0.1" /> <alpha a1="0" a1="1.0" a="0.001" /> </timer>