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

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

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


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

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

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