Механизмы взаимодействия объектов с окружающей средой — различия между версиями
Root (обсуждение | вклад) (Новая: Объекты виртуального пространства могут взаимодействовать следующим образом: * друг с другом ** перед...) |
|||
Строка 15: | Строка 15: | ||
Рассмотрим эти взаимодействия подробнее. | Рассмотрим эти взаимодействия подробнее. | ||
− | == | + | == Взаимодействие объектов друг с другом. События == |
Между собой объекты "общаются" посредством событий. | Между собой объекты "общаются" посредством событий. | ||
− | Событие | + | ''Событие'' — это некоторая информационная сущность, сигнализирующая о действии, производимом объектом (или с объектом). Она может передаваться от объекта как непосредственно другому объекту, так и группе объектов, удовлетворяющих некоторому условию. |
Например, когда аватар пользователя нажимает на кнопку, объект-аватар передает объекту-кнопке событие со смыслом "я тебя нажал". Объект-кнопка получает уведомление о приходе события, и может выполнить в этот момет какие-либо действия. | Например, когда аватар пользователя нажимает на кнопку, объект-аватар передает объекту-кнопке событие со смыслом "я тебя нажал". Объект-кнопка получает уведомление о приходе события, и может выполнить в этот момет какие-либо действия. | ||
− | Пример события группе объектов: выключатель, который включает несколько ламп в помещении, может передать им событие "включиться" с условием "тип объекта | + | Пример события группе объектов: выключатель, который включает несколько ламп в помещении, может передать им событие "включиться" с условием "тип объекта — лампа". Такой подход имеет очевидные преимущества перед непосредственной передачей события каждой лампе в отдельности: например, если в помещение добавить еще одну лампу, то код выключателя не придется модифицировать. |
== Взаимодействие объекта и физического движка == | == Взаимодействие объекта и физического движка == | ||
Строка 29: | Строка 29: | ||
Под этим взаимодействием понимается получение объектом уведомлений от физического движка о действиях, которые в нем происходят. | Под этим взаимодействием понимается получение объектом уведомлений от физического движка о действиях, которые в нем происходят. | ||
− | На данный момент реализовано лишь одно такое действие | + | На данный момент реализовано лишь одно такое действие — init, уведомляющее объект о том, что он только что был создан. |
== Взаимодействие объекта с его пользовательским представлением == | == Взаимодействие объекта с его пользовательским представлением == | ||
Строка 35: | Строка 35: | ||
Объекты существуют в сети Диптауна и обсчитываются на его серверах. Когда пользователь соединяется с этой сетью и входит в виртуальный мир, на его локальной машине создается копия части этого мира, которая затем синхронизуется с серверами. Под данным типом взаимодействия понимается передача информации копиям объектов на пользовательских машинах. | Объекты существуют в сети Диптауна и обсчитываются на его серверах. Когда пользователь соединяется с этой сетью и входит в виртуальный мир, на его локальной машине создается копия части этого мира, которая затем синхронизуется с серверами. Под данным типом взаимодействия понимается передача информации копиям объектов на пользовательских машинах. | ||
− | Для передачи такой информации служат свойства объектов. Свойства | + | Для передачи такой информации служат свойства объектов. ''Свойства'' — это массив произвольных данных, к которому возможен доступ по имени некоторого конкретного свойства. Описание свойств объекта находится в его файле данных. |
− | Основное отличие пользовательских машин в том, что они отображают графическую информацию, | + | Основное отличие пользовательских машин от серверов заключается в том, что они отображают графическую информацию, в то время как на серверах эта информация игнорируется. Поэтому, чаще всего свойства используются для управления графическим представлением объекта. Например, при включении лампы она изменяет свойство "включена" на 1, а клиентский скрипт на это реагирует включением соответствующего источника света в графическом движке; таким образом создается иллюзия того, что лампа "загорелась". |
== Взаимодействие объекта с пользователем == | == Взаимодействие объекта с пользователем == | ||
− | Пользователь, соединяясь с сетью Диптауна, может управлять принадлежащими ему объектами. Имеются ввиду аватары, хотя в общем случае он может управлять любыми объектами, способными реагировать на команды управления. Механизм управления такой: | + | Пользователь, соединяясь с сетью Диптауна, может управлять принадлежащими ему объектами. Имеются ввиду аватары, хотя в общем случае, он может управлять любыми объектами, способными реагировать на команды управления. Механизм управления объектами такой: |
− | * пользователь нажимает клавишу или комбинацию клавиш (варианты: двигает мышью, нажимает кнопку мыши, двигает джойстик и т.д., плюс комбинации этих действий); | + | * пользователь нажимает клавишу или комбинацию клавиш (варианты: двигает мышью, нажимает кнопку мыши, двигает джойстик и т.д., плюс любые комбинации этих действий); |
− | * движок ввода по | + | * движок ввода по внутренним таблицам формирует некоторое сообщение объекту; |
* сообщение доставляется как локальной копии объекта, так и сетевой копии; | * сообщение доставляется как локальной копии объекта, так и сетевой копии; | ||
* объект получает уведомление и предпринимает определенные действия. | * объект получает уведомление и предпринимает определенные действия. | ||
− | Также управляемый пользователем объект может отправлять ему некоторые уведомления | + | Также, управляемый пользователем объект, может отправлять ему (пользователю) некоторые уведомления — например, о происходящих событиях. |
== Взаимодействие объекта с окружающей средой == | == Взаимодействие объекта с окружающей средой == | ||
− | + | Для взаимодейтсивя объектов с окружающей средой существуют специальные средства. Подобно реальным живым организмам, у объектов существует некоторый аналог органов чувств, а так же функциональные элементы, выполняющие роль двигателей или мышц. В качестве органов чувтсв применяются ''сенсоры'' — специальные сущности, позволяющие объекту получать информацию об окружающем его мире; для соверщения различных действий и перемещения, объекты используют т.н. ''моторы''. Таким образом, существование объекта в виртуальном пространстве копирует модели поведения реальных живых существ: оценивая изменения обстрановки окружающей действительности с помощью органов чувств, и те и другие, каким либо образом реагируют на это изменение. | |
− | Список моторов объекта строго задан в его файле данных и не может быть динамически изменен. Фактически, моторы определяют возможное поведение объекта в пространстве. Например, у объекта "ракета" есть мотор | + | Список моторов объекта строго задан в его файле данных и не может быть динамически изменен. Фактически, моторы определяют возможное поведение объекта в пространстве. Например, у объекта "ракета" есть мотор — "двигатель", который позволяет ракете взмывать над землей. Объект может управлять своими моторами, включая и выключая их, а также устанавливая некоторые параметры, зависящие от конкретных типов моторов. |
Мотор задается в файле описания объекта тегом <motor> в корневой секции, например: | Мотор задается в файле описания объекта тегом <motor> в корневой секции, например: | ||
Строка 63: | Строка 63: | ||
</source> | </source> | ||
− | Как видим, мотор задается именем, по которому к нему потом можно будет обращаться, и URL | + | Как мы видим, мотор задается именем, по которому к нему потом можно будет обращаться, и URL адресом, в котором указывается тип мотора и его параметры. В приведенном выше примере, тип мотора — <tt>linear_speed</tt> — позволяет объекту управлять силой по какой-либо оси для достижения определенной скорости в абсолютных координатах. Для него в качестве параметра передается имя твердого тела, к которому будет приложена сила, и вектор направления (в локальных координатах объекта) этой силы. |
На данный момент это единственный реализованный мотор. В недалеком будущем их будет больше. | На данный момент это единственный реализованный мотор. В недалеком будущем их будет больше. | ||
− | Сенсор дожидается выполнения какого-либо условия и отправляет объекту уведомление об этом. На данный момент реализован сенсор | + | |
+ | Сенсор дожидается выполнения какого-либо условия и отправляет объекту уведомление об этом. На данный момент реализован сенсор чем то напоминающий авиационные альтиметры, который высылает уведомление, когда объект достигает определенной высоты. В отличие от моторов, сенсоры полностью динамичны: объект может их создавать и удалять в процессе своего существования. В файле описания объектов сенсоры не указываются. |
Версия 12:27, 7 декабря 2007
Объекты виртуального пространства могут взаимодействовать следующим образом:
- друг с другом
- передавая и получая события;
- с физическим движком
- получая от него уведомления о статусе;
- с пользовательским представлением объекта
- изменяя динамические свойства;
- с пользователем
- получая от него команды ввода;
- высылая ему уведомления;
- с окружающей средой
- управляя моторами;
- получая уведомления от сенсоров.
Рассмотрим эти взаимодействия подробнее.
Содержание |
Взаимодействие объектов друг с другом. События
Между собой объекты "общаются" посредством событий.
Событие — это некоторая информационная сущность, сигнализирующая о действии, производимом объектом (или с объектом). Она может передаваться от объекта как непосредственно другому объекту, так и группе объектов, удовлетворяющих некоторому условию.
Например, когда аватар пользователя нажимает на кнопку, объект-аватар передает объекту-кнопке событие со смыслом "я тебя нажал". Объект-кнопка получает уведомление о приходе события, и может выполнить в этот момет какие-либо действия.
Пример события группе объектов: выключатель, который включает несколько ламп в помещении, может передать им событие "включиться" с условием "тип объекта — лампа". Такой подход имеет очевидные преимущества перед непосредственной передачей события каждой лампе в отдельности: например, если в помещение добавить еще одну лампу, то код выключателя не придется модифицировать.
Взаимодействие объекта и физического движка
Под этим взаимодействием понимается получение объектом уведомлений от физического движка о действиях, которые в нем происходят.
На данный момент реализовано лишь одно такое действие — 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 — позволяет объекту управлять силой по какой-либо оси для достижения определенной скорости в абсолютных координатах. Для него в качестве параметра передается имя твердого тела, к которому будет приложена сила, и вектор направления (в локальных координатах объекта) этой силы.
На данный момент это единственный реализованный мотор. В недалеком будущем их будет больше.
Сенсор дожидается выполнения какого-либо условия и отправляет объекту уведомление об этом. На данный момент реализован сенсор чем то напоминающий авиационные альтиметры, который высылает уведомление, когда объект достигает определенной высоты. В отличие от моторов, сенсоры полностью динамичны: объект может их создавать и удалять в процессе своего существования. В файле описания объектов сенсоры не указываются.