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