Isomover
Isomover - объект используется для осуществления движения и взаимодействия в изометрической карте.
Isomover обязательно должен быть подобъектом isomap.
В проекте с картой (isomap) и движущимися по ней объектами (isomover) часто используют economics и eitems потому, что для завершения процессов часто требуется применить предмет или ресурс.
Начало движения множества изомуверов сильно нагружает систему, поэтому следует позаботиться, чтобы это происходило не в один момент времени. По возможности добавляйте небольшую и различную паузу каждому изомуверу перед стартом.
Содержание
Основные параметры
- Положение (x,y) - рекомендуется выносить isomover-объекты за пределы карты. Иначе, если объект должен появляться не сразу, то он будет просто стоять без движения
- Память - всегда должно быть значение 1, обязательное условие корректной работы. Это позволяет объекту двигаться последовательно, не инициализируясь после каждого движения в исходной точке
- тип ребра min (edge_t_min) - перемещаться по ребрам не ниже заданного, -1 не проверять
- тип ребра max (edge_t_max) - перемещаться по ребрам не выше заданного, -1 не проверять. Типы ребер задаются в isomap
- Старт (start) - точка старта, выбирается из списка точек Isomap
- Финиш (finish) - точка финиша, выбирается из списка точек Isomap
- Скорость (макс) (vel_max) - максимальная скорость, с которой передвигается объект Isomover
- Скорость (vel) - не использовать, вычисляется по формуле автоматически, позже будет скрыто. V = Vmax*(k+(1-k)*(P/Pmax))
- Жизнь (макс) (pow_max) - максимальная жизнь
- Жизнь (pow) - текущая жизнь, высчитывается по формуле автоматически
- Сохранять жизнь в опции (powsave) - если да, то объекты сцены сохранят уровень жизни при выходе со сцены и возвращении на нее
- Коэффициент скорости (speed_k) - коэффициент k в формуле расчета скорости. Чтобы скорость не зависела от значения жизни - указываем speed_k = 1
- Менять угол (fixangle) - изменение угла для предания плавности смены графики при дугообразном перемещении объекта. С появлением 3D-объектов больше не используется
- Тип (mtype) - объекты можно разделять на типы (люди, монстры, звери и т.д.). Взаимодействие происходит между объектами разных типов, настраивается в добавляемых параметрах
- Радиус (mradius) - значения радиуса. Попадание изомувера другого типа в этот радиус позволит начать взаимодействие.
- Цель при действии (mtarget) - мувер может быть целью взаимодействия пока сам действует
- Запретить действие (disact) - мувер не сможет перейти из acting_wait в acting
- Время появления (appear_time) - время в миллисекундах появления и исчезания изомувера (длительность перехода по alpha)
- Время провала (fail_time) - длительность анимации смерти объекта, по его окончанию произойдет переход в состояние disappear
- Время паузы (pause_time) - длительность "заморозки" объекта
- Предмет паузы (pause_item) - предмет для включения паузы
- fail при 0 жизни (zerofail) - 1- при нулевом уровне жизни изомувер перейдет в fail, 0 - останется жив
- Не пересчитывать маршрут (softrecalc) - 1- при отключении ребер графа не произойдет пересчета маршрута, 0 - маршрут будет пересчитан
- Реагировать на (tapreact) - 1- на тап, 0- на клик
Дополнительные параметры
- Графический ресурс:
- вверх (res0) - графический ресурс движения вверх
- вверх/вправо (res1) - графический ресурс движения вверх/вправо
- вправо (res2) - графический ресурс движения вправо
- вниз/вправо (res3) - графический ресурс движения вниз/вправо
- вниз (res4) - графический ресурс движения вниз
- вниз/влево (res5) - графический ресурс движения вниз/влево
- влево (res6) - графический ресурс движения влево
- вверх/влево (res7) - графический ресурс движения вверх/влево. Достаточно указать первые пять ресурсов, а остальные редактор отобразит автоматически симметрично
- деятельность (resa) - графический ресурс для состояния acting
- иконка персонажа (char_ico) - иконка, которая будет находится сверху над персонажем. Изменение масштаба во время игры не влияет на масштаб иконки. Рекомендуется создавать ее с пивотом у нижней границы, тогда при масштабировании не будет образовываться зазор между иконкой и графикой объекта
- смещение иконки персонажа (char_ico_shift) - смещение иконки по вертикали
- рисовать при действии (resad) - 1- мувер рисуется при состоянии acting, 0- не рисуется
- провал (resf) - графический ресурс состояния fail. Может быть картинкой или анимацией
- пауза (resp) - графический ресурс состояния pause
- восстановление жизни (resheal) - графический ресурс восстановления жизни
- 3D ресурс
- модель (mdl) - трехмерный ресурс для отображения объекта
- scale x (mdlSx) - масштаб по оси x
- scale y (mdlSy) - масштаб по оси y
- scale z (mdlSz) - масштаб по оси z
- Звуки
- всплывание подложки (snd_panel) - звук показывающейся подложки
- исчезание подложки (snd_panel_hide) - звук прячущейся подложки
- переход в acting (snd_to_acting) - звук перехода в состояние acting
- применение предмета (snd_item_used) - звук применение предмета при взаимодействии
- предмет при паузе (snd_item_pause) - звук применение предмета при паузе
- конец паузы (snd_pause_end) - звук при окончании паузы
- фейл взаимодействия (snd_fail) - звук при переходе в fail
- успех взаимодействия (snd_success) - звук при переходе в win
- клик (snd_click) - звук при клике
- Коэффициент скорости
- вертикальное (speed_0) - на этот коэффициент умножается скорость при вертикальном движении
- диагональное (speed_1) - на этот коэффициент умножается скорость при диагональном движении
- горизонтальное (speed_2) - на этот коэффициент умножается скорость при горизонтальном движении
Обычно горизонтальный коэффициент равен 1.00, чуть меньше диагональный и еще меньше вертикальный. Это необходимо для создания реалистичности движения относительно перспективы. То есть объекты, двигаясь вверх, как бы отдаляются от нас в глубь, поэтому по экрану они движутся медленней
- Таймер:
- подложка (digBg) - фон для цифр таймера
- цифры (digNorm) - набор из 10-и цифр в виде ресурса анимации (клипа)
- двоеточие (colNorm) - графический ресурс двоеточия
- dx (dx) - смещение таймера по оси x относительно пивота изомувера
- dy (dy) - смещение таймера по оси y относительно пивота изомувера
- dx между цифрами (digShift) - расстояние между цифрами таймера
- dx от (colShift) - отступы числовых разрядов влево и вправо от двоеточия
- жизнь (objlife) - здесь выбирается объект типа прогресс_бар для отображения шкалы уровня жизни. Progress_bar создается отдельным объектом
Таймер позволяет отобразить время до окончания взаимодействия объектов. Например "корабль" прибыл в "порт" и начал отгружать груз. С помощью числового таймера или progress_bar можно увидеть через сколько закончится отгрузка. На рисунке справа показано взаимодействие двух объектов с изображение шкалы жизни одного из объектов и времени до конца взаимодействия.
- Преследование
- тип (chasetype) - тип объекта, который можно преследовать
- радиус (chaseradius) - если объект указанного типа окажется в этом радиусе, то начнется преследование (например полицейская погоня)
- Дорожное движение
- радиус (stopradius) - объекты, которые двигались по одному ребру, останавливаются на расстоянии этого радиуса (необходимо для препятствия наслоений объектов на дороге, железнодорожных путях)
- восстановление жизни:
- критический уровень (pow_min) - Критический уровень жизни
- предмет (pow_item) - Предмет восстановления
- время (pow_time) - Время восстановления жизни
- курсор (curs) - Графический ресурс курсора текущего и всех дочерних объектов
- прокликиваемая (passClk) - Если 1, то картинка прозрачна для клика мышкой (пропускает объектам под ней). Если 2, то картинка сама обрабатывает клик, но и пропускает его дальше" regexp="нет=0, да=1, обработать и пропустить=2
- группа (gr) - Группа, в которую входит текущий объект
- eitems (eitems) - Объект типа eitems
Добавляемые параметры
Взаимодействие с другими объектами:
- тип (mtype) - тип объекта с которым по настроенному ниже сценарию будет происходить взаимодействие, -1 для любого типа
- min жизнь (minlife) - минимальное значение жизни для начала взаимодействия, -1 не проверять
- max жизнь (maxlife) - максимальное значение жизни для начала взаимодействия, -1 не проверять
- тип актив (mtype_a) - тип мувера, который активирует взаимодействие, если данный в процессе подготовки
- анимация (res_a) - анимация взаимодействия, например боя, разгрузки, разговора. Перетаскивается мышкой из редактора ресурсов
- старт тип (stype) - тип старта взаимодействия
- 0 - бесконечное ожидание тапа. Переход в состояние acting не начнется, пока не произойдет тап по объекту
- 1 - автоматический переход в состояние acting
- 2 - время, через которое произойдет переход из acting_wait в acting после начала взаимодействия объектов
- 3 - переход по значению жизни
- старт таймер (stimer) - время, за которое нужно активировать взаимодействие тапом
- старт изм.жизни (slife) - скорость изменения жизни до активации взаимодействия тапом
- старт изм.жизни другого (slife_o) - скорость изменения жизни враг до активации взаимодействия тапом
- предмет (item) - предмет, необходимый для запуска активности. Актуально, когда имеется объект economics
- иконка (ico) - иконка активности
- смещение иконки (ico_shift) - смещение иконки активности по вертикали
- актив тип (atype) - тип старта взаимодействия
- 0 - бесконечное ожидание тапа. Переход в состояние acting не начнется, пока не произойдет тап по объекту
- 1 - автоматический переход в состояние acting
- 2 - время, через которое произойдет переход из acting_wait в acting после начала взаимодействия объектов
- 3 - переход по значению жизни
- актив таймер (atime) - время, которое длится взаимодействие
- актив изменение жизни (alife) - скорость изменения жизни текущего объекта (ед/сек) в состоянии active
- актив изменение жизни другого (alife_o) - скорость изменения жизни другого объекта (ед/сек) в состоянии active
- объект инит (obj) - объект, состояние которого нужно изменить при переходе изомувера в acting_wait
- состояние инит (st) - новое состояние другого объекта
- объект старт (obj_s) - объект, состояние которого нужно изменить при переходе изомувера в acting
- состояние старт (st_s) - новое состояние другого объекта
- объект фейл (obj_f) - объект, состояние которого нужно изменить при переходе изомувера в состояние fail (проигрыш)
- состояние фейл (st_f) - новое состояние другого объекта
- объект успех (obj_w) - объект, состояние которого нужно изменить при переходе изомувера в состояние win (в случае победы)
- состояние успех (st_w) - новое состояние другого объекта
- дельта жизнь (deltalife) при успехе взаимодействия изменить значение жизни на эту величину
- переводить другой в фейл (o_fail) - 1- переводить цель действия в fail, 0- в idle
- переводить другой в мув (o_move) - при неудачном действии 1- переводить цель действия в move, 0- в idle
- можно ускорить (canspeed) - 1- действие можно ускорить. От этого параметра зависит, какое событие будет вызываться по клику на объект в состоянии acting
- звук ожидания (snd_wait) - звук, который будет воспроизводиться в состоянии acting_wait
- звук действия (snd_act) - звук, который будет воспроизводиться в состоянии acting
Для каждого типа объектов, с которыми взаимодействие возможно, необходимо добавить отдельный параметр "взаимодействие с другими объектами" и настроить его. Объекты инит, старт, фейл и успех вызываются при переходе текущего объекта в соответствующие состояния. Например, это может быть диалоговое окно, предлагающее продолжить взаимодействие, запуск дополнительных индикаторов, фейерверк в случае победы.
- объект - объект, состояние которого меняется, если изомувер был нажат в состоянии idel
- состояние - новое состояние объекта
Изменить состояние объекта (nst_move), он же клик при движении:
- объект - объект, состояние которого меняется, если изомувер был нажат в состоянии move
- состояние - новое состояние объекта
- объект - объект, состояние которого меняется, если изомувер был нажат в состоянии pause (заморозка)
- состояние - новое состояние объекта
Изменить состояние объекта (nst_aw_n) он же клик при acting_wait, если другие действия не возможны
- объект - объект, состояние которого меняется, если изомувер был нажат в состоянии acting_wait
- состояние - новое состояние объекта
Изменить состояние объекта (nst_a_1) он же клик при acting, ускорение возможно
- объект - объект, состояние которого меняется, если изомувер был нажат в состоянии acting и ускорение возможно
- состояние - новое состояние объекта
Изменить состояние объекта (nst_a_2) он же клик при acting, ускорение НЕвозможно
- объект - объект, состояние которого меняется, если изомувер был нажат в состоянии acting и ускорение не возможно
- состояние - новое состояние объекта
Изменить состояние объекта (nst_beact) он же клик при beeng_acting
- объект - объект, состояние которого меняется, если изомувер был нажат в состоянии beeng_acting, когда воздействие совершалось над ним другим объектом
- состояние - новое состояние объекта
- объект - объект, состояние которого меняется, если изомувер закончил движение (достиг точки finish)
- состояние - новое состояние объекта
Отправили в текущую ноду (nst_place):
- объект - объект, состояние которого меняется, если изомувер направлен в ту же ноду, в которой и находится
- состояние - новое состояние объекта
- объект - объект, состояние которого меняется, если изомувер перешел в fail
- состояние - новое состояние объекта
- объект - объект, состояние которого меняется, если изомувер Перешел в pause
- состояние - новое состояние объекта
Восстановил здоровье (nst_low_time):
- объект - объект, состояние которого меняется, если изомувер Восстановил здоровье
- состояние - новое состояние объекта
Время истекло: изменить состояние объекта (nst_low_time) он же время на исходе: изменить состояние объекта:
- значение, при котором срабатывает обработчик
- объект - объект, состояние которого меняется по истечению времени
- состояние - новое состояние объекта
Состояния
- idle - дефолтное состояние, в которое isomover переходит после всех манипуляций. Недвижимым объектам следует передавать idle, чтобы они появились (нарисовались) на карте. Для движущихся объектов его практически не используют, объект сам рисуется с началом движения.
- acting_wait - первое состояние взаимодействия (запускается первый таймер, анимация взаимодействия и ожидается старт).
- acting - второе состояние взаимодействия (вызывается после применения предмета или клика, запускает второй таймер).
- being_acted - в этом состоянии пребывает тот объект, над которым идет действие. Объект в этом состоянии невидим.
- move - состояние движения от старта к финишу.
- move_to_smooth - состояние движения от текущей ноды (или следующей, если объект идет) к финишу.
- appear - показать по альфе за время появления.
- disappear - скрыть по альфе за время появления.
- prepare_acting - вызвать взаимодействие без оппонента. Перед вызовом нужно в поле param записать номер взаимодействия по порядку.
- start_acting - продолжить взаимодействие без оппонента. Перед вызовом нужно в поле param записать номер взаимодействия по порядку.
- pause - состояние "заморозки"
Особенности работы
Движение объекта типа isomover задается с помощью отдельной машины состояний через которую происходит управление состояниями move, acting и остальными. Рассмотрим на конкретном примере. У нас есть объект woman типа isomover. Необходимо, чтобы наш изомувер начал движение с точки b1 и дальше начал двигаться бесконечно по кольцу b2-b3-b4-b5. Движение задается машиной состояний woman_machine.
Для управления циклическим ходом назначим дополнительный параметр ww. Название параметра должно быть уникально и не совпадать с параметрами игровых объектов.
Для того, чтобы изомувер двигался каждый раз к новой точке, необходимо повторно инициализировать его точку финиша. Однако, если мы продолжим указывать ему состояние move для движения, то каждый раз он будет начинать движение с точки старта. Чтобы это исправить воспользуемся состоянием move_to_smooth, которое заставляет двигаться изомувер от текущей ноде к финишу, будто старт и финиш мы все время смещаем на шаг.
Основная логика будет находиться в состоянии circle_moving нашей машины. Надо сделать так, чтобы изомувер переходил в это состояние после движения по каждому из ребер. Для этого зайдем в свойства изомувера, нажмем правой кнопкой мыши и добавим параметр конец движения. У него есть поля объект и свойство. Объект - машина состояний woman_machine, состояние circle_moving этой машины. Таким образом, в конце каждого акта движения изомувер будет запускать состояние, в котором мы будем менять его точку финиша и запускать его движение.
Не забываем, что все операции с переменными должны отделяться скобками, как и сама переменная
Пример
Два изомувера (police_car и werewolf) совершают циклическое движение по определенному маршруту, заданному с помощью машин состояний (car_machine и werewolf_machine соответственно). Когда объекты оказываются в радиусе (достаточном для активации добавляемого параметра "Взаимодействие с другими объектами"), объект police_car начинает взаимодействовать с объектом werewolf. По истечению времени воздействия объект police_car переходит в состояние lose. Если кликнуть на процесс взаимодействия объектов, то объект police_car перейдет в состояние win. Эти состояния указаны в машине состояний "win_lose".
- Пример:
S:\!MOBILE\!!!EditorGames\Wiki_sample\Isomap.rar