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

Материал из Deeptown Manual
Версия от 22:16, 6 декабря 2007; Root (обсуждение | вклад)

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

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

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

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

Содержание

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

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

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

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

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

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

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

На данный момент реализовано лишь одно такое действие - 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 - позволяет объекту управлять силой по какой-либо оси для достижения определенной скорости в абсолютных координатах. Для него в качестве параметра передается имя твердого тела, к которому будет приложена сила, и вектор направления (в локальных координатах объекта) этой силы.

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

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

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

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