Isomap — различия между версиями
Denisov (обсуждение | вклад) (→Состояния) |
|||
Строка 34: | Строка 34: | ||
**'''Save graph''' - сохранить все внесенные изменения | **'''Save graph''' - сохранить все внесенные изменения | ||
**'''Exit without saving''' - выйти без сохранения | **'''Exit without saving''' - выйти без сохранения | ||
− | <br><br> | + | <br> |
+ | == Выделение маршрутов между локациями на карте == | ||
+ | После создания объекта ''isomap'' с необходимыми маршрутами вкладываем в него 2 объекта типа ''ribbon'' - один для нового маршрута (еще не пройденного) и для уже пройденных. | ||
+ | В Таскорганайзере в "прохождение кейсов" указываем isomap, ribbon новый и ribbon пройденный.<br> | ||
+ | Также в Економике необходимо для каждой локации (вкладка "локация хидден") указать номер её узла (нумерация нод начинается с 0!).<br><br> | ||
== Состояния == | == Состояния == |
Версия 10:42, 5 мая 2017
Isomap - объект с помощью которого, появилась возможность создать траекторию движения для объекта типа isomover. Например, установить движение машин по дорогам, людей по тротуарам, птиц в небе. Каждому объекту можно задать свою уникальную траекторию, учитывать столкновения объектов и запускать их взаимодействие (разговор, бой, погоня). Объекты типа isomap и isomover часто используются с economics и items. Особенность isomap в том, что положение дочерних объектов по оси y пересчитывается, как для z - если изомувер на карте ниже, то он над объектом, а если выше по оси y, то объект рисуется поверх изомувера. Строится набор нод (точек старта и финиша) и ребер, которые их соединяют. Движение объектов происходит между нодами вдоль ребер. Каждое ребро имеет только одно направление.
Содержание
Создание карт
Основная работа с isomap происходит в окне isomap setup, где создаются ноды и ребра по которым и будет происходить движение isomap-объектов. В свойствах объекта, нажатием на троеточие, открываем isomap setup. В открывшемся окне нажимаем build graph
Все необходимое для дальнейшей работы находим в, открывшейся сверху, строке объекта isomap. Пункты появившегося меню сгруппированы по настройкам нод, ребер, добавлению вспомогательных точек и сохранению результатов.
- Настройки нод:
- Добавить - добавление новой ноды
- Выбрать - если кнопка включена, то можно выбрать ноду на карте
- Selected node name - поле установки имени для ноды
- Selected node x, y coordanate - поле управления координатами ноды. Можно также управлять перетаскиванием ноды мишкой по карте
- Удалить - удаление выбранной ноды
- Delete all nodes - удаление всех нод
Ноды целесообразно ставить для задания старта и финиша, на перекрестках траектории и в местах, где предполагаемый объект будет изменять направление движения.
После того, как проставлены нужные ноды, можно приступать к формированию ребер.
- Настройки ребер:
- Добавить - добавить новое ребро
- Выбрать - выбрать ребро. Нажимаем на эту кнопку и кликаем на нужное ребро (оно должно окраситься красным цветом)
- Selected edge type - поле выбора типа ребра. Тип ребер можно учитывать в объектах isomover (задавать движение лишь по определенным типам ребер)
- Selected edge weight - поле установки веса ребра
- Удалить - удалить ребро
- Delete all edges - удалить сразу все ребра
- Select graph edge knot - включенная кнопка позволяет перемещать мышкой точки, расположенные на ребрах
- Insert before - вспомогательная точка, добавляемая до главной точки ребра
- Insert after - вспомогательная точка, добавляемая после основной точки ребра
Нам необходимо создать путь для движения изомувера. Выбираем первую ноду- она будет началом траектории, затем нажимаем Добавить и кликаем на второй ноде - это будет конец траектории. Именно в таком направлении будет двигаться объект, от первой ко второй ноде. Для двустороннего движения понадобится два односторонних ребра через одни и те же ноды. Выделив ребро, можно заметить что две точки между ним отличаются: одна закрашена, а вторая пустая. По этим признакам можно определить направление движения - оно будет происходит от пустой к закрашенной точке.
- Дополнительные кнопки:
- Hide all edges - скрыть все ребра, на карте остаются лишь точки
- Save graph - сохранить все внесенные изменения
- Exit without saving - выйти без сохранения
Выделение маршрутов между локациями на карте
После создания объекта isomap с необходимыми маршрутами вкладываем в него 2 объекта типа ribbon - один для нового маршрута (еще не пройденного) и для уже пройденных.
В Таскорганайзере в "прохождение кейсов" указываем isomap, ribbon новый и ribbon пройденный.
Также в Економике необходимо для каждой локации (вкладка "локация хидден") указать номер её узла (нумерация нод начинается с 0!).
Состояния
- disable_edge - состояние, назначаемое isomap для отключения ребра. Необходимо предварительно выбрать две ноды, формирующие это ребро. Для этого предназначены параметры n1 и n2 у объекта isomap. Этим параметрам передаем значения нод и далее устанавливаем состояние disable_edge для isomap. В итоге наше ребро станет не доступным
- enable_edge - состояние, назначаемое isomap для того, чтобы сделать ребро доступным, если оно было отключено ранее. Настройка аналогична disable_edge (детальнее на рисунке).
Особенности расположения
В подобъекты isomap помещают объекты isomover и участки background, если изомувер в процессе движения может оказаться как перед, так и за ними. Это крыши домов, фонари, деревья. Объект родитель сам установит по координате z необходимое размещение объектов, согласно их типу. Объект isomover будет двигаться за элементами карты, если по оси y он в данный момент находится выше.
Как видно на рисунках, объект isomover (оранжевый шарик) в проекте находится ниже, чем объект 009_theater (изображение театра). В обычной ситуации отрисовка идет сверху вниз по дереву проекта и, если бы оба объекта были подобъектами не isomap, а другого объекта, то isomover должен был бы перекрыть собой все изображения по оси z. Тем не менее, они оба принадлежат объекту isomap, при отрисовке он динамически меняет значение z своим подобъектам. Этим создается псевдо-3D, будто наш шарик проходит сзади театра.
Isomap может влиять только на своих прямых потомков. Если дочерний объект сам является родителем для кого-то, то его подобъекты принимают z-координаты непосредственного родителя.
Почему же тогда изомувер находится выше фона, а не рисуется под ним? Фон задан объектом ground_12, который не является дочерним объектом для isomap. Поэтому isomap ничего не знает о фоне и учитывает только свои подобъекты.