Синхронизация произвольных событий и свойств

Для работы синхронизации 3D-объекта необходимо обрабатывать три его события

Значения синхронизируемых переменных устанавливаются как произвольные свойства подобъекта synch 3D-объекта, например:

var obj1 = scene.getObjectByName("МойОбъект");
obj1.synch.myProperty = 10;

Свойства должны устанавливаться простых типов (строка, число), не допустимы массивы, объекты типа Position3D и т.д. После их изменения приходит событие onSynchReceived, которое можно обработать, например, так:

obj1. onSynchReceived = function()
{
  if (Event.synched.myProperty) // если изменилось именно это свойство
  {
    this.ApplyMyPropertyValue(this.synch.myProperty);
  }
}

Инициализация может проходить следующим образом:

obj1. onSynchInitReceived = function()
{
  if (typeof( this.synch. myProperty) == "undefined" || this.synch. myProperty == null )
  {			
    this.synch. myProperty = 5;			
  }
}

а обработка сброса следующим:

obj1. onSynchResetReceived = function()
{
  this.synch. myProperty = 5;			
}

Ваши синхронизируемые свойства должны полностью описывать текущее состояние объекта в любой момент времени, поэтому они не должны использоваться для синхронизации действий. Например, вместо действия «перемещение из точки A в точку B» правильно завести состояние перемещения из точки А в точку B с определенным стартовым временем X и продолжительностью T.

Для того, чтобы правильно оперировать со временем у любого 3D-объекта в подобъекте synch есть свойство serverTime, которое содержит время в миллисекундах, идущее одинаково на всех компьютерах посетителей виртуального мира. Таким образом, это время подходит для синхронизации длительных событий.