Isomover

Материал из wiki.appsalutecreator.com
Версия от 15:50, 30 ноября 2015; Denisov (обсуждение | вклад) (Основные параметры)
Перейти к: навигация, поиск

Isomover - объект используется для осуществления движения и взаимодействия в изометрической карте.

 Isomover обязательно должен быть подобъектом isomap. 

В проекте с картой (isomap) и движущимися по ней объектами (isomover) часто используют economics и eitems потому, что для завершения процессов часто требуется применить предмет или ресурс.

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

Основные параметры

  • Положение (x,y) - рекомендуется выносить isomover-объекты за пределы карты. Иначе, если объект должен появляться не сразу, то он будет просто стоять без движения
  • Память - всегда должно быть значение 1, обязательное условие корректной работы. Это позволяет объекту двигаться последовательно, не инициализируясь после каждого движения в исходной точке
  • тип ребра min (edge_t_min) - перемещаться по ребрам не ниже заданного, -1 не проверять
  • тип ребра max (edge_t_max) - перемещаться по ребрам не выше заданного, -1 не проверять
  • Старт (start) - точка старта, выбирается из списка точек Isomap
  • Финиш (finish) - точка финиша, выбирается из списка точек Isomap
  • Скорость (макс) (vel_max) - максимальная скорость, с которой передвигается объект Isomover
  • Скорость (vel) - не использовать, вычисляется по формуле автоматически, позже будет скрыто. V = Vmax*(k+(1-k)*(P/Pmax))
  • Жизнь (макс) (pow_max) - максимальная жизнь
  • Жизнь (pow) - текущая жизнь, высчитывается по формуле автоматически
  • Сохранять жизнь в опции (powsave) - если да, то объекты сцены сохранят уровень жизни при выходе со сцены и возвращении на нее
  • Коэффициент скорости (speed_k) - коэффициент в формуле расчета скорости. Чтобы скорость не зависела от значения жизни - указываем speed_k = 1
  • Менять угол (fixangle) - изменение угла для предания плавности смены графики при перемещении объекта. С появлением 3D-объектов больше не используется
  • Тип (mtype) - объекты можно разделять на типы (люди, монстры, звери). Взаимодействие происходит между объектами разных типов, настраивается в добавляемых параметрах
  • Радиус (mradius) - значения радиуса. Попадание изомувера другого типа в этот радиус позволит начать взаимодействие.
  • Цель при действии - (mtarget) - мувер может быть целью взаимодействия пока сам действует
  • Время появления (appear_time) - время в миллисекундах появления объекта (длительность перехода по alpha)
  • Время провала (fail_time) - длительность анимации смерти объекта
  • Время паузы (pause_time) - длительность "заморозки" объекта


Дополнительные параметры

Isomover1.png
  • Графический ресурс:
    • вверх (res0) - графический ресурс движения вверх
    • вверх/вправо (res1) - графический ресурс движения вверх/вправо
    • вправо (res2) - графический ресурс движения вправо
    • вниз/вправо (res3) - графический ресурс движения вниз/вправо
    • вниз (res4) - графический ресурс движения вниз
    • вниз/влево (res5) - графический ресурс движения вниз/влево
    • влево (res6) - графический ресурс движения влево
    • вверх/влево (res7) - графический ресурс движения вверх/влево. Достаточно указать первые пять ресурсов, а остальные редактор отобразит автоматически симметрично
    • иконка персонажа (char_ico) - иконка, которая будет находится сверху над персонажем. Изменение масштаба во время игры не влияет на масштаб иконки. Рекомендуется создавать ее с пивотом у нижней границы, тогда при масштабировании не будет образовываться зазор между иконкой и графикой объекта.
  • Коэффициент скорости
    • вертикальное (speed_0) - на этот коэффициент умножается скорость при вертикальном движении
    • диагональное (speed_1) - на этот коэффициент умножается скорость при диагональном движении
    • горизонтальное (speed_2) - на этот коэффициент умножается скорость при горизонтальном движении

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

Isomover2.png
  • Таймер:
    • подложка (digBg) - фон для цифр таймера
    • цифры (digNorm) - набор из 10-и цифр в виде ресурса анимации (клипа)
    • двоеточие (colNorm) - графический ресурс двоеточия
    • dx (dx) - смещение таймера по оси x относительно пивота изомувера
    • dy (dy) - смещение таймера по оси y относительно пивота изомувера
    • dx между цифрами (digShift) - расстояние между цифрами таймера
    • dx от (colShift) - отступы числовых разрядов влево и вправо от двоеточия
    • жизнь (objlife) - здесь выбирается объект типа прогресс_бар для отображения шкалы уровня жизни. Progress_bar создается отдельным объектом

Таймер позволяет отобразить время до окончания взаимодействия объектов. Например "корабль" прибыл в "порт" и начал отгружать груз. С помощью числового таймера или progress_bar можно увидеть через сколько закончится отгрузка. На рисунке справа показано взаимодействие двух объектов с изображение шкалы жизни одного из объектов и времени до конца взаимодействия.

  • Преследование
    • тип (chasetype) - тип объекта, который можно преследовать
    • радиус (chaseradius) - если объект указанного типа окажется в этом радиусе, то начнется преследование (например полицейская погоня)
  • Дорожное движение
    • радиус (stopradius) - объекты, которые двигались по одному ребру, останавливаются на расстоянии этого радиуса (необходимо для препятствия наслоений объектов на дороге, железнодорожных путях)


Добавляемые параметры

Isomover9.png

+.png Взаимодействие с другими объектами:

  • тип (mtype) - тип объекта с которым по настроенному ниже сценарию будет происходить взаимодействие, -1 для любого типа
  • min жизнь (minlife) - минимальное значение жизни для начала взаимодействия, -1 не проверять
  • max жизнь (maxlife) - минимальное значение жизни для начала взаимодействия, -1 не проверять
  • анимация (res_a) - анимация взаимодействия, например боя, разгрузки, разговора. Перетаскивается мышкой из редактора ресурсов
  • старт тип (stype) - тип старта взаимодействия
    • 0 - бесконечное ожидание тапа. Переход в состояние acting не начнется, пока не произойдет тап по объекту
    • 1 - автоматический переход в состояние acting
    • 2 - время, через которое произойдет переход из acting_wait в acting после начала взаимодействия объектов
    • 3 - переход по значению жизни
  • старт таймер (stimer) - время, за которое нужно активировать взаимодействие тапом
  • предмет (item) - предмет, необходимый для запуска активности. Актуально, когда имеется объект economics
  • иконка (ico) - иконка активности
  • смещение иконки (ico_shift) - смещение иконки активности по вертикали
  • актив таймер (atime) - время, которое длится взаимодействие
  • актив изменение жизни (alife) - скорость изменения жизни текущего объекта (ед/сек) в состоянии active
  • актив изменение жизни другого (alife_o) - скорость изменения жизни другого объекта (ед/сек) в состоянии active
Isomover3.png
  • объект инит (obj) - объект, состояние которого нужно изменить при переходе текущего объекта в acting_wait
  • состояние инит (st) - новое состояние другого объекта
  • объект старт (obj_s) - объект, состояние которого нужно изменить при переходе текущего объекта в acting
  • состояние старт (st_s) - новое состояние другого объекта
  • объект фейл (obj_f) - объект, состояние которого нужно изменить при переходе текущего объекта в состояние fail (проигрыш)
  • состояние фейл (st_f) - новое состояние другого объекта
  • объект успех (obj_w) - объект, состояние которого нужно изменить при переходе текущего объекта в состояние win (в случае победы)
  • состояние успех (st_w) - новое состояние другого объекта

Для каждого типа объектов, с которыми взаимодействие возможно, необходимо добавить отдельный параметр "взаимодействие с другими объектами" и настроить его. Объекты инит, старт, фейл и успех вызываются при переходе текущего объекта в соответствующие состояния. Например, это может быть диалоговое окно, предлагающее продолжить взаимодействие, запуск дополнительных индикаторов, фейерверк в случае победы.

+.png Клик при простое (nst_idle):

  • объект - объект, состояние которого меняется, если изомувер был нажат в состоянии idel
  • состояние - новое состояние объекта

+.png Изменить состояние объекта (nst_move), он же клик при движении:

  • объект - объект, состояние которого меняется, если изомувер был нажат в состоянии move
  • состояние - новое состояние объекта

+.png Клик при паузе (nst_pause):

  • объект - объект, состояние которого меняется, если изомувер был нажат в состоянии pause (заморозка)
  • состояние - новое состояние объекта

+.png Изменить состояние объекта (nst_aw_n) он же клик при acting_wait, если другие действия не возможны

  • объект - объект, состояние которого меняется, если изомувер был нажат в состоянии acting_wait
  • состояние - новое состояние объекта

+.png Изменить состояние объекта (nst_a_1) он же клик при acting, ускорение возможно

  • объект - объект, состояние которого меняется, если изомувер был нажат в состоянии acting и ускорение возможно
  • состояние - новое состояние объекта

+.png Изменить состояние объекта (nst_a_2) он же клик при acting, ускорение НЕвозможно

  • объект - объект, состояние которого меняется, если изомувер был нажат в состоянии acting и ускорение не возможно
  • состояние - новое состояние объекта

+.png Изменить состояние объекта (nst_beact) он же клик при beeng_acting

  • объект - объект, состояние которого меняется, если изомувер был нажат в состоянии beeng_acting, когда воздействие совершалось над ним другим объектом
  • состояние - новое состояние объекта

+.png Конец движения (nst_finish):

  • объект - объект, состояние которого меняется, если изомувер закончил движение (достиг точки finish)
  • состояние - новое состояние объекта

+.png Отправили в текущую ноду (nst_place):

  • объект - объект, состояние которого меняется, если изомувер направлен в ту же ноду, в которой и находится
  • состояние - новое состояние объекта

+.png Перешел в fail (nst_gopause):

  • объект - объект, состояние которого меняется, если изомувер перешел в pause
  • состояние - новое состояние объекта

+.png Перешел в pause (nst_heal):

  • объект - объект, состояние которого меняется, если изомувер восстановил здоровье
  • состояние - новое состояние объекта

+.png Восстановил здоровье (nst_low_time):

  • объект - объект, состояние которого меняется, если изомувер направлен в ту же ноду, в которой и находится
  • состояние - новое состояние объекта

+.png Время истекло: изменить состояние объекта (nst_low_time) он же время на исходе: изменить состояние объекта:

  • значение, при котором срабатывает обработчик
  • объект - объект, состояние которого меняется по истечению времени
  • состояние - новое состояние объекта


Состояния

Isomover box.png
  • idle - дефолтное состояние, в которое isomover переходит после всех манипуляций. Недвижимым объектам следует передавать idle, чтобы они появились (нарисовались) на карте. Для движущихся объектов его практически не используют, объект сам рисуется с началом движения.
  • acting_wait - первое состояние взаимодействия (запускается первый таймер, анимация взаимодействия и ожидается старт).
  • acting - второе состояние взаимодействия (вызывается после применения предмета или клика, запускает второй таймер).
  • being_acted - в этом состоянии пребывает тот объект, над которым идет действие. Объект в этом состоянии невидим.
  • move - состояние движения от старта к финишу.
  • move_to_smooth - состояние движения от текущей ноды (или следующей, если объект идет) к финишу.
  • appear - показать по альфе за время появления.
  • disappear - скрыть по альфе за время появления.
  • prepare_acting - вызвать взаимодействие без оппонента. Перед вызовом нужно в поле param записать номер взаимодействия по порядку.
  • start_acting - продолжить взаимодействие без оппонента. Перед вызовом нужно в поле param записать номер взаимодействия по порядку.
  • pause -
  • pause_wait -


Особенности работы

Isomover5.png

Движение объекта типа Isomever задается с помощью отдельной машины состояний через которую происходит управление состояниями move, acting и остальными. Рассмотрим на конкретном примере. У нас есть объект woman типа isomover. Необходимо, чтобы наш изомувер начал движение с точки b1 и дальше начал двигаться бесконечно по кольцу: b2-b3-b4-b5. Вся логика движения изомувера вынесена в машину состояний woman_machine. Здесь задается начальное состояние new_state, в котором объект будет находиться до появления на карте в течение 1000 мс (1 сек). Поскольку изомуверы лучше размещать за пределами карты, то все эти 1000 мс для нас этот объект будет не видим на карте. Через секунду произойдет переход в move_init. Наш объект появится в точке b1 и перейдет в b2 со скоростью, указанной в свойствах.

Isomover8.png


Для управления циклическим ходом назначим ему дополнительный параметр ww, который будет изначально равен 1. Название параметра должно быть уникально и не совпадать с параметрами игровых объектов. В конце передадим изомуверу состояние move:

<set obj="woman" par="start" val_node="b1"/>
<set obj="woman" par="finish" val_node="b2"/>
<set obj="woman" par="ww" val_node="1"/>
<set obj="woman" st="move"/>
Isomover6.png
Isomover7.png

Для того, чтобы изомувер двигался каждый раз к новой точке, необходимо повторно инициализировать его точку финиша. Однако, если мы продолжим указывать ему состояние move для движения, то каждый раз он будет начинать движение с точки старта. Чтобы это исправить воспользуемся состоянием move_to_smooth, которое заставляет двигаться изомувер от текущей ноде к финишу, будто старт и финиш мы все время смещаем на шаг.

Основная логика будет находиться в состоянии new_state_3 нашей машины. Надо сделать так, чтобы изомувер переходил в это состояние после движения по каждому из ребер. Для этого зайдем в свойства изомувера, нажмем правой кнопкой мыши и добавим параметр конец движения. У него есть поля объект и свойство. Объект - машина состояний woman_machine, состояние new_state_3 этой машины. Таким образом, в конце каждого акта движения изомувер будет запускать состояние, в котором мы будем менять его точку финиша и запускать его движение.

Откроем состояние new_state_3 и посмотрим на его логику. Сначала указана группа сетов для инициализвации точек финиша. Каждая из них работает со своим if, каждый из которых проверяет текущее значение параметра ww. Чтобы отличались наши точки финиша и задать разные значения параметру ww, создадим дополнительную переменную WW. Ей мы присваиваем значения параметра ww, после чего в следующем сете говорим, что ww равна инкрементированному на единицу значению WW: ww = WW + 1. Инкрементирование происходит только при значениях ww больше нуля. Когда ww станет равным 5, то мы возвращаем ему значение 1 и все повторяется заново.

Не забываем, что все операции с переменными должны отделяться скобками, как и сама переменная

<set obj="woman" par="finish" val_node="b3" if="0"/>
<set obj="woman" par="finish" val_node="b4" if="1"/>
<set obj="woman" par="finish" val_node="b5" if="2"/>
<set obj="woman" par="finish" val_node="b2" if="3"/>
<set obj="woman" st="move_to_smooth" if="!5"/>

<set obj="woman" par="ww" val="((WW)+1)" if="!4"/>
<set obj="woman" par="ww" val="1" if="!4"/>
<if obj="wooman" par="ww" val="2"/>
<if obj="wooman" par="ww" val="3"/>
<if obj="wooman" par="ww" val="4"/>
<if obj="wooman" par="ww" val="0"/>
<if obj="wooman" par="ww" val="5"/>