Механизмы взаимодействия объектов с окружающей средой — различия между версиями
Korvin (обсуждение | вклад) м (→Взаимодействие объектов друг с другом. События) |
|||
Строка 21: | Строка 21: | ||
''Событие'' — это некоторая информационная сущность, сигнализирующая о действии, производимом объектом (или с объектом). Она может передаваться от объекта как непосредственно другому объекту, так и группе объектов, удовлетворяющих некоторому условию. | ''Событие'' — это некоторая информационная сущность, сигнализирующая о действии, производимом объектом (или с объектом). Она может передаваться от объекта как непосредственно другому объекту, так и группе объектов, удовлетворяющих некоторому условию. | ||
− | Например, когда аватар пользователя нажимает на кнопку, объект-аватар передает объекту-кнопке событие со смыслом "я тебя нажал". Объект-кнопка получает уведомление о приходе события, и может выполнить в этот | + | Например, когда аватар пользователя нажимает на кнопку, объект-аватар передает объекту-кнопке событие со смыслом "я тебя нажал". Объект-кнопка получает уведомление о приходе события, и может выполнить в этот момент какие-либо действия. |
Пример события группе объектов: выключатель, который включает несколько ламп в помещении, может передать им событие "включиться" с условием "тип объекта — лампа". Такой подход имеет очевидные преимущества перед непосредственной передачей события каждой лампе в отдельности: например, если в помещение добавить еще одну лампу, то код выключателя не придется модифицировать. | Пример события группе объектов: выключатель, который включает несколько ламп в помещении, может передать им событие "включиться" с условием "тип объекта — лампа". Такой подход имеет очевидные преимущества перед непосредственной передачей события каждой лампе в отдельности: например, если в помещение добавить еще одну лампу, то код выключателя не придется модифицировать. |
Версия 08:25, 2 ноября 2008
Объекты виртуального пространства могут взаимодействовать следующим образом:
- друг с другом
- передавая и получая события;
- с физическим движком
- получая от него уведомления о статусе;
- с пользовательским представлением объекта
- изменяя динамические свойства;
- с пользователем
- получая от него команды ввода;
- высылая ему уведомления;
- с окружающей средой
- управляя моторами;
- получая уведомления от сенсоров.
Рассмотрим эти взаимодействия подробнее.
Содержание |
Взаимодействие объектов друг с другом. События
Между собой объекты "общаются" посредством событий.
Событие — это некоторая информационная сущность, сигнализирующая о действии, производимом объектом (или с объектом). Она может передаваться от объекта как непосредственно другому объекту, так и группе объектов, удовлетворяющих некоторому условию.
Например, когда аватар пользователя нажимает на кнопку, объект-аватар передает объекту-кнопке событие со смыслом "я тебя нажал". Объект-кнопка получает уведомление о приходе события, и может выполнить в этот момент какие-либо действия.
Пример события группе объектов: выключатель, который включает несколько ламп в помещении, может передать им событие "включиться" с условием "тип объекта — лампа". Такой подход имеет очевидные преимущества перед непосредственной передачей события каждой лампе в отдельности: например, если в помещение добавить еще одну лампу, то код выключателя не придется модифицировать.
Взаимодействие объекта и физического движка
Под этим взаимодействием понимается получение объектом уведомлений от физического движка о действиях, которые в нем происходят.
На данный момент реализовано лишь одно такое действие — 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 — позволяет объекту управлять силой по какой-либо оси для достижения определенной скорости в абсолютных координатах. Для него в качестве параметра передается имя твердого тела, к которому будет приложена сила, и вектор направления (в локальных координатах объекта) этой силы.
На данный момент это единственный реализованный мотор. В недалеком будущем их будет больше.
Сенсор дожидается выполнения какого-либо условия и отправляет объекту уведомление об этом. На данный момент реализован сенсор чем то напоминающий авиационные альтиметры, который высылает уведомление, когда объект достигает определенной высоты. В отличие от моторов, сенсоры полностью динамичны: объект может их создавать и удалять в процессе своего существования. В файле описания объектов сенсоры не указываются.