Isomover — различия между версиями

Материал из wiki.appsalutecreator.com
Перейти к: навигация, поиск
(Основные параметры)
(Состояния)
 
(не показано 38 промежуточных версий 8 участников)
Строка 27: Строка 27:
 
*'''Время провала''' (''fail_time'') - длительность анимации смерти объекта, по его окончанию произойдет переход в состояние ''disappear''
 
*'''Время провала''' (''fail_time'') - длительность анимации смерти объекта, по его окончанию произойдет переход в состояние ''disappear''
 
*'''Время паузы''' (''pause_time'') - длительность "заморозки" объекта
 
*'''Время паузы''' (''pause_time'') - длительность "заморозки" объекта
*'''Предмет паузы'''
+
*'''Предмет паузы''' (''pause_item'') - предмет для включения паузы
 +
*'''Прибавка паузы''' (''pause_add'') - если изомувер уже на паузе, по состоянию pause_add продлевает паузу на заданное значение ms
 +
*'''fail при 0 жизни''' (''zerofail'') - 1- при нулевом уровне жизни изомувер перейдет в fail, 0 - останется жив
 +
*'''Не пересчитывать маршрут''' (''softrecalc'') - 1- при отключении ребер графа не произойдет пересчета маршрута, 0 - маршрут будет пересчитан
 +
*'''Реагировать на''' (''tapreact'') - 1- на тап, 0- на клик
 +
*'''Дорожное движение''' (''trafficcheck'') - 1 - проверять столкновения, 0 - нет
 +
*'''использовать бонусы ко времени''' (''useTimeItems'') - флаг, будет ли изомувер использовать бонусы от амулетов на ускорение времени взаимодействия (настраивается в экономике). 1 - да, 0 - нет.
 
<br>
 
<br>
  
Строка 41: Строка 47:
 
**влево (''res6'') - графический ресурс движения влево  
 
**влево (''res6'') - графический ресурс движения влево  
 
**вверх/влево (''res7'') - графический ресурс движения вверх/влево. Достаточно указать первые пять ресурсов, а остальные редактор отобразит автоматически симметрично
 
**вверх/влево (''res7'') - графический ресурс движения вверх/влево. Достаточно указать первые пять ресурсов, а остальные редактор отобразит автоматически симметрично
**иконка персонажа (''char_ico'') - иконка, которая будет находится сверху над персонажем. Изменение масштаба во время игры не влияет на масштаб иконки. Рекомендуется создавать ее с пивотом у нижней границы, тогда при масштабировании не будет образовываться зазор между иконкой и графикой объекта.
+
**деятельность (''resa'') - графический ресурс для состояния acting и acting_wait
 +
**рисовать действие поверх (''resaover'') - 1 - поверх, 0 - подменять ресурс. Применяем, если, например, анимацию нужно отобразить поверх изомувера.
 +
**иконка персонажа (''char_ico'') - иконка, которая будет находится сверху над персонажем. Изменение масштаба во время игры не влияет на масштаб иконки. Рекомендуется создавать ее с пивотом у нижней границы, тогда при масштабировании не будет образовываться зазор между иконкой и графикой объекта
 +
**смещение иконки персонажа (''char_ico_shift'') - смещение иконки по вертикали
 +
**рисовать при действии (''resad'') - 1- мувер рисуется при состоянии acting, 0- не рисуется
 +
**провал (''resf'') - графический ресурс состояния fail. Может быть картинкой или анимацией
 +
**пауза (''resp'') - графический ресурс состояния pause
 +
**рисовать паузу поверх (''respover'') - 1 - поверх, 0 - подменять ресурс.
 +
**восстановление жизни (''resheal'') - графический ресурс восстановления жизни
 +
**нашлепка при критическом уровне (''reslow'') - Графический ресурс нашлепки при критическом уровне здоровья
 +
*'''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_0'') - на этот коэффициент умножается скорость при вертикальном движении
Строка 58: Строка 88:
 
**жизнь (''objlife'') - здесь выбирается объект типа прогресс_бар для отображения шкалы уровня жизни. Progress_bar создается отдельным объектом
 
**жизнь (''objlife'') - здесь выбирается объект типа прогресс_бар для отображения шкалы уровня жизни. Progress_bar создается отдельным объектом
 
Таймер позволяет отобразить время до окончания взаимодействия объектов. Например "корабль" прибыл в "порт" и начал отгружать груз. С помощью числового таймера или progress_bar можно увидеть через сколько закончится отгрузка. На рисунке справа показано взаимодействие двух объектов с изображение шкалы жизни одного из объектов и времени до конца взаимодействия.
 
Таймер позволяет отобразить время до окончания взаимодействия объектов. Например "корабль" прибыл в "порт" и начал отгружать груз. С помощью числового таймера или progress_bar можно увидеть через сколько закончится отгрузка. На рисунке справа показано взаимодействие двух объектов с изображение шкалы жизни одного из объектов и времени до конца взаимодействия.
 +
*'''окно предмета''':
 +
**паспорт(''wndPassport'') - текстовый id, в котором в ''word'' лежит текст - название, в icon1 - графика изомувера для окна использования айтем
 +
Паспорт из этой группы используется в случаях  открытия окна использования айтема для паузы или восстановления здоровья.
 +
**(текст) название айтема(''wndItemName'') - текстовый объект, в который вкладывается название айтема
 +
**(текст) текст айтема(''wndItemText'') - куда кладем описание айтема
 +
**иконка айтема(''wndItemIcon'') - иконка айтема
 +
**название взаимодействия(''wndActingName'') - куда кладем word и паспорта
 +
**превью взаимодействия(''wndActingPreview'') - паспорт или txtID из взаимодействия
 +
**(каунтер) есть предмета(''wndCntHave'') - сколько есть нужного айтема
 +
**(каунтер) нужно предмета(''wndCntNeed'') - нужно предмета
 +
**(каутер) цена res1(wndCntRes1) - цена предмета res1
 +
**(каутер) цена res2(wndCntRes2) - цена предмета res2
 +
**само окно(''wndWnd'') - должно иметь состояние show
 
*'''Преследование'''
 
*'''Преследование'''
 
**тип (''chasetype'') - тип объекта, который можно преследовать
 
**тип (''chasetype'') - тип объекта, который можно преследовать
Строка 63: Строка 106:
 
*'''Дорожное движение'''
 
*'''Дорожное движение'''
 
**радиус (''stopradius'') - объекты, которые двигались по одному ребру, останавливаются на расстоянии этого радиуса (необходимо для препятствия наслоений объектов на дороге, железнодорожных путях)
 
**радиус (''stopradius'') - объекты, которые двигались по одному ребру, останавливаются на расстоянии этого радиуса (необходимо для препятствия наслоений объектов на дороге, железнодорожных путях)
 +
*'''восстановление жизни''':
 +
**критический уровень (''pow_min'') - Критический уровень жизни
 +
**предмет (''pow_item'') - Предмет восстановления
 +
**время (''pow_time'') - Время восстановления жизни
 +
*'''ускорение взаимодействия''':
 +
**коэффициент (''boost_coef'') - Коэффициент ускорения взаимодействия.
 +
**время (''boost_time'') - Какое время (в миллисекундах) действует ускорение. 
 +
 +
*курсор (''curs'') - Графический ресурс курсора текущего и всех дочерних объектов
 +
*прокликиваемая (''passClk'') - Если 1, то картинка прозрачна для клика мышкой (пропускает объектам под ней). Если 2, то картинка сама обрабатывает клик, но и пропускает его дальше" regexp="нет=0, да=1, обработать и пропустить=2
 +
*группа (''gr'') - Группа, в которую входит текущий объект
 +
*eitems (''eitems'') - Объект типа eitems
 
<br>
 
<br>
  
Строка 69: Строка 124:
 
[[Файл:+.png]] '''Взаимодействие с другими объектами''':
 
[[Файл:+.png]] '''Взаимодействие с другими объектами''':
 
*тип (''mtype'') - тип объекта с которым по настроенному ниже сценарию будет происходить взаимодействие, -1 для любого типа
 
*тип (''mtype'') - тип объекта с которым по настроенному ниже сценарию будет происходить взаимодействие, -1 для любого типа
*min жизнь (''minlife'') - минимальное значение жизни для начала взаимодействия, -1 не проверять
+
*min жизнь (''minlife'') - минимальное значение жизни для начала взаимодействия, -1 не проверять. Служит для проверки жизни при взаимодействии и с "тип", и с "тип актив"
*max жизнь (''maxlife'') - минимальное значение жизни для начала взаимодействия, -1 не проверять
+
*max жизнь (''maxlife'') - максимальное значение жизни для начала взаимодействия, -1 не проверять. Служит для проверки жизни при взаимодействии и с "тип", и с "тип актив"
 +
*тип актив (''mtype_a'') - тип мувера, который активирует взаимодействие, если данный в процессе подготовки
 
*анимация (''res_a'') - анимация взаимодействия, например боя, разгрузки, разговора. Перетаскивается мышкой из редактора ресурсов
 
*анимация (''res_a'') - анимация взаимодействия, например боя, разгрузки, разговора. Перетаскивается мышкой из редактора ресурсов
 
*старт тип (''stype'') - тип старта взаимодействия
 
*старт тип (''stype'') - тип старта взаимодействия
Строка 78: Строка 134:
 
**3 - переход по значению жизни
 
**3 - переход по значению жизни
 
*старт таймер (''stimer'') - время, за которое нужно активировать взаимодействие тапом
 
*старт таймер (''stimer'') - время, за которое нужно активировать взаимодействие тапом
 +
*старт изм.жизни (''slife'') - скорость изменения жизни до активации взаимодействия тапом
 +
*старт изм.жизни другого (''slife_o'') - скорость изменения жизни враг до активации взаимодействия тапом
 
*предмет (''item'') - предмет, необходимый для запуска активности. Актуально, когда имеется объект economics
 
*предмет (''item'') - предмет, необходимый для запуска активности. Актуально, когда имеется объект economics
 
*иконка (''ico'') - иконка активности
 
*иконка (''ico'') - иконка активности
 
*смещение иконки (''ico_shift'') - смещение иконки активности по вертикали
 
*смещение иконки (''ico_shift'') - смещение иконки активности по вертикали
 +
*актив тип (''atype'') - тип старта взаимодействия
 +
**0 - бесконечное ожидание тапа. Переход в состояние acting не начнется, пока не произойдет тап по объекту
 +
**1 - автоматический переход в состояние acting
 +
**2 - время, через которое произойдет переход из acting_wait в acting после начала взаимодействия объектов
 +
**3 - переход по значению жизни
 
*актив таймер (''atime'') - время, которое длится взаимодействие
 
*актив таймер (''atime'') - время, которое длится взаимодействие
 
*актив изменение жизни (''alife'') - скорость изменения жизни текущего объекта (ед/сек) в состоянии active
 
*актив изменение жизни (''alife'') - скорость изменения жизни текущего объекта (ед/сек) в состоянии active
Строка 86: Строка 149:
  
 
[[Файл:Isomover3.png|right|300px]]
 
[[Файл:Isomover3.png|right|300px]]
*объект инит (''obj'') - объект, состояние которого нужно изменить при переходе текущего объекта в acting_wait
+
*объект инит (''obj'') - объект, состояние которого нужно изменить при переходе изомувера в acting_wait
 
*состояние инит (''st'') - новое состояние другого объекта
 
*состояние инит (''st'') - новое состояние другого объекта
*объект старт (''obj_s'') - объект, состояние которого нужно изменить при переходе текущего объекта в acting
+
*объект старт (''obj_s'') - объект, состояние которого нужно изменить при переходе изомувера в acting
 
*состояние старт (''st_s'') - новое состояние другого объекта
 
*состояние старт (''st_s'') - новое состояние другого объекта
*объект фейл (''obj_f'') - объект, состояние которого нужно изменить при переходе текущего объекта в состояние fail (проигрыш)
+
*объект фейл (''obj_f'') - объект, состояние которого нужно изменить при переходе изомувера в состояние fail (проигрыш)
 
*состояние фейл (''st_f'') - новое состояние другого объекта
 
*состояние фейл (''st_f'') - новое состояние другого объекта
*объект успех (''obj_w'') - объект, состояние которого нужно изменить при переходе текущего объекта в состояние win (в случае победы)
+
*объект успех (''obj_w'') - объект, состояние которого нужно изменить при переходе изомувера в состояние win (в случае победы)
 
*состояние успех (''st_w'') - новое состояние другого объекта
 
*состояние успех (''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
 
Для каждого типа объектов, с которыми взаимодействие возможно, необходимо добавить отдельный параметр "взаимодействие с другими объектами" и настроить его. Объекты инит, старт, фейл и успех вызываются при переходе текущего объекта в соответствующие состояния. Например, это может быть диалоговое окно, предлагающее продолжить взаимодействие, запуск дополнительных индикаторов, фейерверк в случае победы.
 
Для каждого типа объектов, с которыми взаимодействие возможно, необходимо добавить отдельный параметр "взаимодействие с другими объектами" и настроить его. Объекты инит, старт, фейл и успех вызываются при переходе текущего объекта в соответствующие состояния. Например, это может быть диалоговое окно, предлагающее продолжить взаимодействие, запуск дополнительных индикаторов, фейерверк в случае победы.
 +
*паспорт(''wndPassport'') - текстовый id, в котором в word лежит текст - название, в icon1 - графика изомувера для окна использования айтем
 +
Паспорт из этой группы используется в случаях открытия окна использования айтема для взаимодействия.
  
 
[[Файл:+.png]] '''Клик при простое''' (''nst_idle''):
 
[[Файл:+.png]] '''Клик при простое''' (''nst_idle''):
Строка 124: Строка 195:
 
*состояние - новое состояние объекта
 
*состояние - новое состояние объекта
 
[[Файл:+.png]] '''Перешел в fail''' (''nst_gopause''):
 
[[Файл:+.png]] '''Перешел в fail''' (''nst_gopause''):
*объект - объект, состояние которого меняется, если изомувер перешел в pause
+
*объект - объект, состояние которого меняется, если изомувер перешел в fail
 
*состояние - новое состояние объекта
 
*состояние - новое состояние объекта
 
[[Файл:+.png]] '''Перешел в pause''' (''nst_heal''):
 
[[Файл:+.png]] '''Перешел в pause''' (''nst_heal''):
*объект - объект, состояние которого меняется, если изомувер восстановил здоровье
+
*объект - объект, состояние которого меняется, если изомувер Перешел в pause
 
*состояние - новое состояние объекта
 
*состояние - новое состояние объекта
 
[[Файл:+.png]] '''Восстановил здоровье''' (''nst_low_time''):
 
[[Файл:+.png]] '''Восстановил здоровье''' (''nst_low_time''):
*объект - объект, состояние которого меняется, если изомувер направлен в ту же ноду, в которой и находится
+
*объект - объект, состояние которого меняется, если изомувер Восстановил здоровье
 +
*состояние - новое состояние объекта
 +
[[Файл:+.png]] '''Здоровье на 0''' (''nst_pow0'') - здоровье снизилось для нуля.
 +
*объект - объект, состояние которого меняется, если изомувер Восстановил здоровье
 
*состояние - новое состояние объекта
 
*состояние - новое состояние объекта
 
[[Файл:+.png]] '''Время истекло: изменить состояние объекта''' (''nst_low_time'') он же '''время на исходе: изменить состояние объекта''':
 
[[Файл:+.png]] '''Время истекло: изменить состояние объекта''' (''nst_low_time'') он же '''время на исходе: изменить состояние объекта''':
Строка 140: Строка 214:
 
==Состояния==
 
==Состояния==
 
[[Файл:isomover_box.png|right|350px]]
 
[[Файл:isomover_box.png|right|350px]]
*'''idle''' - дефолтное состояние, в которое isomover переходит после всех манипуляций. Недвижимым объектам следует передавать idle, чтобы они появились (нарисовались) на карте. Для движущихся объектов его практически не используют, объект сам рисуется с началом движения.<br>
+
*'''idle''' - дефолтное состояние, в которое isomover переходит после всех манипуляций. Недвижимым объектам следует передавать ''idle'', чтобы они появились (нарисовались) на карте. Для движущихся объектов его практически не используют, объект сам рисуется с началом движения. Если обьект был в ''being_acted'', то ему следуюет передать ''idle'' перед ''move_to_smooth'', чтобы он сдвинулся с места.
*'''acting_wait''' - первое состояние взаимодействия (запускается первый таймер, анимация взаимодействия и ожидается старт).<br>
+
*'''acting_wait''' - состояние, в котором изомувер ожидает взаимодействия с другим обьектом или с пользователем.
*'''acting''' - второе состояние взаимодействия (вызывается после применения предмета или клика, запускает второй таймер).<br>
+
*'''acting''' - состояние, в которое изомувер попадает, если встречаются два изомувера, которые могут взаимодействовать друг с другом или принудительная анимация взаимодействия с самим собой.
*'''being_acted''' - в этом состоянии пребывает тот объект, над которым идет действие. Объект в этом состоянии невидим.<br>
+
*'''being_acted''' - в этом состоянии пребывает тот объект, над которым идет действие.
*'''move''' - состояние движения от старта к финишу.<br>
+
*'''move''' - состояние движения от старта к финишу.
*'''move_to_smooth''' - состояние движения от текущей ноды (или следующей, если объект идет) к финишу.<br>
+
*'''move_to_smooth''' - состояние движения от текущей ноды (или следующей, если объект идет) к финишу. Если обьект уже следует куда-то, и его надо перенаправить, то передаем ему это состояние.
*'''appear''' - показать по альфе за время появления.<br>
+
*'''appear''' - показать по альфе за время появления.
*'''disappear''' - скрыть по альфе за время появления.<br>
+
*'''disappear''' - скрыть по альфе за время появления.
*'''prepare_acting''' - вызвать взаимодействие без оппонента. Перед вызовом нужно в поле param записать номер взаимодействия по порядку.<br>
+
*'''prepare_acting''' - принудительно перевести изомувер в acting_wait.
*'''start_acting''' - продолжить взаимодействие без оппонента. Перед вызовом нужно в поле param записать номер взаимодействия по порядку.
+
*'''start_acting''' - принудительно перевести изомувер в acting.
*'''pause''' -  
+
*'''fail''' - это состояние вызывается, если за время acting пользователь ничего не предпринял. Выполняется обработка взаимодействия в случае провала.
*'''pause_wait''' -  
+
*'''win''' - противоположное предыдущему. Пользователь предпринял действие, выполняется обработка взаимодействия в случае успеха.
<br>
+
*'''healing''' - вылечить изомувер.
 +
*'''tap''' - симуляция тапа по изомуверу.
 +
*'''boost''' - ускорить взаимодействие изомувера.
 +
*'''pause''' - заморозить изомувер.
 +
*'''pause_wait''' - показать окно предмета, вызывающего заморозку.
 +
*'''pause_add''' - продлить заморозку на время, указанное в одноименном параметре (см. выше), если изомувер уже заморожен.
  
 
==Особенности работы==
 
==Особенности работы==
Движение объекта типа ''Isomever'' задается с помощью отдельной машины состояний через которую происходит управление состояниями move, acting и остальными. Рассмотрим на конкретном примере. У нас есть объект '''woman''' типа ''isomover''. Необходимо, чтобы наш изомувер начал движение с точки b1 и дальше начал двигаться бесконечно по кольцу:
+
[[Файл:Isomover6.png|right|300px]][[Файл:Isomover8.png|left|200px]]
b2-b3-b4-b5. Вся логика движения изомувера вынесена в машину состояний ''woman_machine''. Здесь задается начальное состояние ''new_state'', в котором объект будет находиться до появления на карте в течение 1000 мс (1 сек). Поскольку изомуверы лучше размещать за пределами карты, то все эти 1000 мс для нас этот объект будет не видим на карте. Через секунду произойдет переход в move_init. Наш объект появится в точке b1 и перейдет в b2 со скоростью, указанной в свойствах.
+
Движение объекта типа ''isomover'' задается с помощью отдельной машины состояний через которую происходит управление состояниями move, acting и остальными. Рассмотрим на конкретном примере. У нас есть объект '''woman''' типа ''isomover''. Необходимо, чтобы наш изомувер начал движение с точки b1 и дальше начал двигаться бесконечно по кольцу b2-b3-b4-b5. Движение задается машиной состояний ''woman_machine''.<br>
[[Файл:Isomover8.png|left|250px]]
+
Для управления циклическим ходом назначим дополнительный параметр ''ww''. Название параметра должно быть уникально и не совпадать с параметрами игровых объектов.<br>
<br>Для управления циклическим ходом назначим ему дополнительный параметр ''ww'', который будет изначально равен 1. Название параметра должно быть уникально и не совпадать с параметрами игровых объектов. В конце передадим изомуверу состояние move.
+
Для того, чтобы изомувер двигался каждый раз к новой точке, необходимо повторно инициализировать его точку финиша. Однако, если мы продолжим указывать ему состояние move для движения, то каждый раз он будет начинать движение с точки старта. Чтобы это исправить воспользуемся состоянием move_to_smooth, которое заставляет двигаться изомувер от текущей ноде к финишу, будто старт и финиш мы все время смещаем на шаг.
 
+
<br>Основная логика будет находиться в состоянии ''circle_moving'' нашей машины. Надо сделать так, чтобы изомувер переходил в это состояние после движения по каждому из ребер. Для этого зайдем в свойства изомувера, нажмем правой кнопкой мыши и добавим параметр '''конец движения'''. У него есть поля ''объект'' и ''свойство''. Объект - машина состояний ''woman_machine'', состояние ''circle_moving'' этой машины. Таким образом, в конце каждого акта движения изомувер будет запускать состояние, в котором мы будем менять его точку финиша и запускать его движение.
[[Файл:Isomover6.png|right|290px]]Для того, чтобы изомувер двигался каждый раз к новой точке, необходимо повторно инициализировать его точку финиша. Однако, если мы продолжим указывать ему состояние move для движения, то каждый раз он будет начинать движение с точки старта. Чтобы это исправить воспользуемся состоянием move_to_smooth, которое заставляет двигаться изомувер от текущей ноде к финишу, будто старт и финиш мы все время смещаем на шаг.
+
<br>Не забываем, что все операции с переменными должны отделяться скобками, как и сама переменная<br><br>
  
Основная логика будет находиться в состоянии new_state_3 нашей машины. Надо сделать так, чтобы изомувер переходил в это состояние после движения по каждому из ребер. Для этого зайдем в свойства изомувера, нажмем правой кнопкой мыши и добавим параметр '''конец движения'''. У него есть поля ''объект'' и ''свойство''. Объект - машина состояний ''woman_machine'', состояние ''new_state_3'' этой машины. Таким образом, в конце каждого акта движения изомувер будет запускать состояние, в котором мы будем менять его точку финиша и запускать его движение.
+
===Пример===
 +
Два изомувера (police_car и werewolf) совершают циклическое движение по определенному маршруту, заданному с помощью машин состояний (car_machine и werewolf_machine соответственно). Когда объекты оказываются в радиусе (достаточном для активации добавляемого параметра '''"Взаимодействие с другими объектами"'''), объект '''police_car''' начинает взаимодействовать с объектом '''werewolf'''. По истечению времени воздействия объект '''police_car''' переходит в состояние '''fail'''. Если кликнуть на процесс взаимодействия объектов, то объект '''police_car''' перейдет в состояние '''win'''.
 +
*'''Пример:
 +
S:\!MOBILE\!!!EditorGames\Wiki_sample\Isomap.rar
  
Откроем состояние ''new_state_3'' и посмотрим на его логику. Сначала указана группа сетов для инициализвации точек финиша. Каждая из них работает со своим if, каждый из которых проверяет текущее значение параметра ''ww''. Чтобы отличались наши точки финиша и задать разные значения параметру ''ww'', создадим дополнительную переменную ''WW''. Ей мы присваиваем значения параметра ''ww'', после чего в следующем сете говорим, что ''ww'' равна инкрементированному на единицу значению ''WW'': ww = WW + 1. Инкрементирование происходит только при значениях ''ww'' больше нуля. Когда ''ww'' станет равным 5, то мы возвращаем ему значение 1 и все повторяется заново.
 
  
Не забываем, что все операции с переменными должны отделяться скобками, как и сама переменная<br><br>
 
  
 
[[Category:Main objects]]
 
[[Category:Main objects]]
 
[[Category:Game mechanic]]
 
[[Category:Game mechanic]]

Текущая версия на 14:33, 22 декабря 2018

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) - предмет для включения паузы
  • Прибавка паузы (pause_add) - если изомувер уже на паузе, по состоянию pause_add продлевает паузу на заданное значение ms
  • fail при 0 жизни (zerofail) - 1- при нулевом уровне жизни изомувер перейдет в fail, 0 - останется жив
  • Не пересчитывать маршрут (softrecalc) - 1- при отключении ребер графа не произойдет пересчета маршрута, 0 - маршрут будет пересчитан
  • Реагировать на (tapreact) - 1- на тап, 0- на клик
  • Дорожное движение (trafficcheck) - 1 - проверять столкновения, 0 - нет
  • использовать бонусы ко времени (useTimeItems) - флаг, будет ли изомувер использовать бонусы от амулетов на ускорение времени взаимодействия (настраивается в экономике). 1 - да, 0 - нет.


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

Isomover1.png
  • Графический ресурс:
    • вверх (res0) - графический ресурс движения вверх
    • вверх/вправо (res1) - графический ресурс движения вверх/вправо
    • вправо (res2) - графический ресурс движения вправо
    • вниз/вправо (res3) - графический ресурс движения вниз/вправо
    • вниз (res4) - графический ресурс движения вниз
    • вниз/влево (res5) - графический ресурс движения вниз/влево
    • влево (res6) - графический ресурс движения влево
    • вверх/влево (res7) - графический ресурс движения вверх/влево. Достаточно указать первые пять ресурсов, а остальные редактор отобразит автоматически симметрично
    • деятельность (resa) - графический ресурс для состояния acting и acting_wait
    • рисовать действие поверх (resaover) - 1 - поверх, 0 - подменять ресурс. Применяем, если, например, анимацию нужно отобразить поверх изомувера.
    • иконка персонажа (char_ico) - иконка, которая будет находится сверху над персонажем. Изменение масштаба во время игры не влияет на масштаб иконки. Рекомендуется создавать ее с пивотом у нижней границы, тогда при масштабировании не будет образовываться зазор между иконкой и графикой объекта
    • смещение иконки персонажа (char_ico_shift) - смещение иконки по вертикали
    • рисовать при действии (resad) - 1- мувер рисуется при состоянии acting, 0- не рисуется
    • провал (resf) - графический ресурс состояния fail. Может быть картинкой или анимацией
    • пауза (resp) - графический ресурс состояния pause
    • рисовать паузу поверх (respover) - 1 - поверх, 0 - подменять ресурс.
    • восстановление жизни (resheal) - графический ресурс восстановления жизни
    • нашлепка при критическом уровне (reslow) - Графический ресурс нашлепки при критическом уровне здоровья
  • 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, чуть меньше диагональный и еще меньше вертикальный. Это необходимо для создания реалистичности движения относительно перспективы. То есть объекты, двигаясь вверх, как бы отдаляются от нас в глубь, поэтому по экрану они движутся медленней

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

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

  • окно предмета:
    • паспорт(wndPassport) - текстовый id, в котором в word лежит текст - название, в icon1 - графика изомувера для окна использования айтем

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

    • (текст) название айтема(wndItemName) - текстовый объект, в который вкладывается название айтема
    • (текст) текст айтема(wndItemText) - куда кладем описание айтема
    • иконка айтема(wndItemIcon) - иконка айтема
    • название взаимодействия(wndActingName) - куда кладем word и паспорта
    • превью взаимодействия(wndActingPreview) - паспорт или txtID из взаимодействия
    • (каунтер) есть предмета(wndCntHave) - сколько есть нужного айтема
    • (каунтер) нужно предмета(wndCntNeed) - нужно предмета
    • (каутер) цена res1(wndCntRes1) - цена предмета res1
    • (каутер) цена res2(wndCntRes2) - цена предмета res2
    • само окно(wndWnd) - должно иметь состояние show
  • Преследование
    • тип (chasetype) - тип объекта, который можно преследовать
    • радиус (chaseradius) - если объект указанного типа окажется в этом радиусе, то начнется преследование (например полицейская погоня)
  • Дорожное движение
    • радиус (stopradius) - объекты, которые двигались по одному ребру, останавливаются на расстоянии этого радиуса (необходимо для препятствия наслоений объектов на дороге, железнодорожных путях)
  • восстановление жизни:
    • критический уровень (pow_min) - Критический уровень жизни
    • предмет (pow_item) - Предмет восстановления
    • время (pow_time) - Время восстановления жизни
  • ускорение взаимодействия:
    • коэффициент (boost_coef) - Коэффициент ускорения взаимодействия.
    • время (boost_time) - Какое время (в миллисекундах) действует ускорение.
  • курсор (curs) - Графический ресурс курсора текущего и всех дочерних объектов
  • прокликиваемая (passClk) - Если 1, то картинка прозрачна для клика мышкой (пропускает объектам под ней). Если 2, то картинка сама обрабатывает клик, но и пропускает его дальше" regexp="нет=0, да=1, обработать и пропустить=2
  • группа (gr) - Группа, в которую входит текущий объект
  • eitems (eitems) - Объект типа eitems


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

Isomover9.png

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

  • тип (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
Isomover3.png
  • объект инит (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

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

  • паспорт(wndPassport) - текстовый id, в котором в word лежит текст - название, в icon1 - графика изомувера для окна использования айтем

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

+.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):

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

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

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

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

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

+.png Здоровье на 0 (nst_pow0) - здоровье снизилось для нуля.

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

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

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


Состояния

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

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

Isomover6.png
Isomover8.png

Движение объекта типа 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 переходит в состояние fail. Если кликнуть на процесс взаимодействия объектов, то объект police_car перейдет в состояние win.

  • Пример:

S:\!MOBILE\!!!EditorGames\Wiki_sample\Isomap.rar