Механизмы взаимодействия объектов с окружающей средой

Материал из Deeptown Manual
Версия от 08:31, 2 ноября 2008; Korvin (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Объекты виртуального пространства могут взаимодействовать следующим образом:

  • друг с другом
    • передавая и получая события;
  • с физическим движком
    • получая от него уведомления о статусе;
  • с пользовательским представлением объекта
    • изменяя динамические свойства;
  • с пользователем
    • получая от него команды ввода;
    • высылая ему уведомления;
  • с окружающей средой
    • управляя моторами;
    • получая уведомления от сенсоров.

Рассмотрим эти взаимодействия подробнее.

Содержание

Взаимодействие объектов друг с другом. События

Между собой объекты "общаются" посредством событий.

Событие — это некоторая информационная сущность, сигнализирующая о действии, производимом объектом (или с объектом). Она может передаваться от объекта как непосредственно другому объекту, так и группе объектов, удовлетворяющих некоторому условию.

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

Пример события группе объектов: выключатель, который включает несколько ламп в помещении, может передать им событие "включиться" с условием "тип объекта — лампа". Такой подход имеет очевидные преимущества перед непосредственной передачей события каждой лампе в отдельности: например, если в помещение добавить еще одну лампу, то код выключателя не придется модифицировать.

Взаимодействие объекта и физического движка

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

На данный момент реализовано лишь одно такое действие — init, уведомляющее объект о том, что он только что был создан.

Взаимодействие объекта с его пользовательским представлением

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

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

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

Взаимодействие объекта с пользователем

Пользователь, соединяясь с сетью Диптауна, может управлять принадлежащими ему объектами. Имеются ввиду аватары, хотя в общем случае, он может управлять любыми объектами, способными реагировать на команды управления. Механизм управления объектами такой:

  • пользователь нажимает клавишу или комбинацию клавиш (варианты: двигает мышью, нажимает кнопку мыши, двигает джойстик и т.д., плюс любые комбинации этих действий);
  • движок ввода по внутренним таблицам формирует некоторое сообщение объекту;
  • сообщение доставляется как локальной копии объекта, так и сетевой копии;
  • объект получает уведомление и предпринимает определенные действия.

Также, управляемый пользователем объект, может отправлять ему (пользователю) некоторые уведомления — например, о происходящих событиях.

Взаимодействие объекта с окружающей средой

Для взаимодействия объектов с окружающей средой существуют специальные средства. Подобно реальным живым организмам, у объектов существует некоторый аналог органов чувств, а так же функциональные элементы, выполняющие роль двигателей или мышц. В качестве органов чувств применяются сенсоры — специальные сущности, позволяющие объекту получать информацию об окружающем его мире; для совершения различных действий и перемещения, объекты используют т.н. моторы. Таким образом, существование объекта в виртуальном пространстве копирует модели поведения реальных живых существ: оценивая изменения обстановки окружающей действительности с помощью органов чувств, и те и другие, каким либо образом реагируют на это изменение.

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

Мотор задается в файле описания объекта тегом <motor> в корневой секции, например: <source lang="xml"> <model bxd="http://dao.deeptown.org/bxd/model.bxd">

   <motor name="engine" url="linear_speed:cube:(0,1,0)" />

</model> </source>

Как мы видим, мотор задается именем, по которому к нему потом можно будет обращаться, и URL адресом, в котором указывается тип мотора и его параметры. В приведенном выше примере, тип мотора — linear_speed — позволяет объекту управлять силой по какой-либо оси для достижения определенной скорости в абсолютных координатах. Для него в качестве параметра передается имя твердого тела, к которому будет приложена сила, и вектор направления (в локальных координатах объекта) этой силы.

На данный момент это единственный реализованный мотор. В недалеком будущем их будет больше.


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

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
информация
документация
Инструменты