Isomap

Материал из wiki.appsalutecreator.com
Перейти к: навигация, поиск

Isomap - объект с помощью которого, появилась возможность создать траекторию движения для объекта типа isomover. Например, установить движение машин по дорогам, людей по тротуарам, птиц в небе. Каждому объекту можно задать свою уникальную траекторию, учитывать столкновения объектов и запускать их взаимодействие (разговор, бой, погоня). Объекты типа isomap и isomover часто используются с economics и items. Особенность isomap в том, что положение дочерних объектов по оси y пересчитывается, как для z - если изомувер на карте ниже, то он над объектом, а если выше по оси y, то объект рисуется поверх изомувера. Строится набор нод (точек старта и финиша) и ребер, которые их соединяют. Движение объектов происходит между нодами вдоль ребер. Каждое ребро имеет только одно направление.

Создание карт

Основная работа с isomap происходит в окне isomap setup, где создаются ноды и ребра по которым и будет происходить движение isomap-объектов. В свойствах объекта, нажатием на троеточие, открываем isomap setup. В открывшемся окне нажимаем build graph

Line.jpg

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

  • Настройки нод:
    • Добавить - добавление новой ноды
    • Выбрать - если кнопка включена, то можно выбрать ноду на карте
    • Selected node name - поле установки имени для ноды
    • Selected node x, y coordanate - поле управления координатами ноды. Можно также управлять перетаскиванием ноды мишкой по карте
    • Удалить - удаление выбранной ноды
    • Delete all nodes - удаление всех нод

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

Isomap setup1.png
После того, как проставлены нужные ноды, можно приступать к формированию ребер.
  • Настройки ребер:
    • Добавить - добавить новое ребро
    • Выбрать - выбрать ребро. Нажимаем на эту кнопку и кликаем на нужное ребро (оно должно окраситься красным цветом)
    • 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!).

Состояния

Isomap st1.png

  • disable_edge - состояние, назначаемое isomap для отключения ребра. Необходимо предварительно выбрать две ноды, формирующие это ребро. Для этого предназначены параметры n1 и n2 у объекта isomap. Этим параметрам передаем значения нод и далее устанавливаем состояние disable_edge для isomap. В итоге наше ребро станет не доступным
  • enable_edge - состояние, назначаемое isomap для того, чтобы сделать ребро доступным, если оно было отключено ранее. Настройка аналогична disable_edge (детальнее на рисунке).

Особенности расположения

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

Isomap setup2.png

Isomap setup3.png


Как видно на рисунках, объект isomover (оранжевый шарик) в проекте находится ниже, чем объект 009_theater (изображение театра). В обычной ситуации отрисовка идет сверху вниз по дереву проекта и, если бы оба объекта были подобъектами не isomap, а другого объекта, то isomover должен был бы перекрыть собой все изображения по оси z. Тем не менее, они оба принадлежат объекту isomap, при отрисовке он динамически меняет значение z своим подобъектам. Этим создается псевдо-3D, будто наш шарик проходит сзади театра.

Isomap может влиять только на своих прямых потомков. Если дочерний объект сам является родителем для кого-то, то его подобъекты принимают z-координаты непосредственного родителя.

Почему же тогда изомувер находится выше фона, а не рисуется под ним? Фон задан объектом ground_12, который не является дочерним объектом для isomap. Поэтому isomap ничего не знает о фоне и учитывает только свои подобъекты.