4.1. События.
Также, как имена полей, многие узлы содержат имена событий (events).
Существует два типа событий – eventIn и eventOut.
События eventOut – выходящие события, которые генерируют информацию (например, изменение значения или время щелчка мыши).
События eventIn – входящие события, которые принимают информацию из узла снаружи и что-то делают с ними.
Каждое событие имеет тип, связанный с ним (описано выше).
Некоторые узлы содержат поля, которые являются выделенными (exposed field). Это означает, что узел имеет два события, определённых для этого поля – set_fieldname и fieldname_changed. Эти события являются событиями eventIn и eventOut для поля, которые могут быть использованы для установки значения и сообщения миру снаружи о том, когда он был изменён.
Если использовать set_fieldname для установки значения поля, узел генерирует событие fieldname_changed. Для простоты использования set_ и _changed части названий событий могут быть отброшены и браузер сам решит, какое событие использовать. Если поле не является выделенным, оно не может быть изменено событием, и его значение в файле – это значение, которое будет использоваться для него всё время. Для просмотра, какие поля являются выделенными, следует обратиться к описанию синтаксиса узлов.
4.2. Маршруты.
Для того, чтобы делать какие-то полезные действия с событиями, необходимо их связать между собой. Эта связь определяется как ROUTE (маршрут). Например, для связи touchTime eventOut с startTime eventIn (например, для проигрывания звука по щелчку мыши), мы направили бы событие следующим образом:
ROUTE SENSOR.touchTime TO SOUND.startTime
Эта часть кода направляет событие touchTime из узла TouchSensor (о нём рассказывается далее) в событие startTime в узле Sound. Когда TouchSensor нажат, звук начинает играть. Здесь необходимо использовать определение DEF для каждого узла, чтобы была возможность связать их (у каждого узла должно быть своё индивидуальное имя).
Сначала определяем узлы TouchSensor и Sound (с полями внутри них):
DEF SENSOR TouchSensor {
}
DEF SOUND Sound {
}
Если существует ряд объектов с одинаковыми названиями (с использованием USE), и маршруты между ними, все объекты взаимодействуют, т.е. если необходимо, чтобы только один взаимодействовал, нужно дать ему уникальное имя или использовать узел PROTO.
4.3. Сенсоры (датчики) – генераторы событий.
4.3.1. SphereSensor (Сферический датчик).
Синтаксис узла:
SphereSensor {
exposedField SFBool autoOffset TRUE
exposedField SFBool enabled TRUE
exposedField SFRotation offset 0 1 0 0
eventOut SFBool isActive
eventOut SFRotation rotation_changed
eventOut