- 7. Сценарии
В этой главе мы рассмотрим использование сценариев в виртуальных мирах. Нашей целью в данный момент не является написание сценариев. Это придет позже. Сейчас мы посмотрим на то, как вставлять сценарии в VRML-файлы.
7.1. Узел Script
Узел сценариев является, быть может, самым важным из нововведений в VRML97 по сравнению со спецификацией VRML 1.0. Он наделяет ранее статичные миры практически неограниченным набором возможностей. В сущности, узел Script позволяет автору создавать свои собственные узлы с полями, входящими и исходящими событиями. Синтаксис узла Script таков:
Script {
exposedField MFString url [ ]
field SFBool directOutput FALSE
field SFBool mustEvaluate FALSE
# And any number of:
eventIn eventType eventName
field fieldType fieldName initialValue
eventOut eventType eventName
}
Итак, все сценарии имеют три общих основных поля – url, directOutput и mustEvaluate. Кроме того, они могут иметь любое число определенных пользователем полей, входящих и исходящих событий. Их определение весьма напоминает декларирование прототипа в утверждении PROTO. А именно они определяются при помощи ключевых слов field (поле), eventIn (входящее событие) и eventOut (исходящее событие). Конкретный набор зависит от вашего желания. После ключевого слова определяется тип поля (события), например SFFloat, далее идет его название. В случае полей нужно также указать то значение, которое будет использоваться по умолчанию. Например:
Script {
eventIn SFBool input
field SFBool boolValue TRUE
eventOut SFBool output
url “filter.js”
}
В приведенном выше примере мы имеем по одному типу поля/события каждого вида. Там есть входящее событие input, исходящее событие output и одно поле с названием boolValue и значением по умолчанию TRUE. Указано также, что код сценария может быть найден в файле ” filter.js “.
Нужно отметить, что узел Script не может иметь открытых (exposed) полей.
7.2. Языки программирования
Сценарии в VRML можно определить одним из трех способов. Во-первых, можно использовать откомпилированный Java-код из файла с расширением .class, указанного в поле url. Во-вторых, можно использовать код на JavaScript из внешнего файла с расширением .js. Ну и в-третьих, можно включать код на языке JavaScript непосредственно в поле url. Последнее делается так:
url “javascript:
function input(value, time) {
if (value==boolValue) output = value;
}
”
Итак, встроенный код включается в файл при помощи ссылки “javascript:”, сопровождаемой непосредственно кодом. Это очень удобно для коротких кусочков кода или же кода, только единожды встречающегося на протяжение всего мира. Если один и тот же фрагмент кода используется в нескольких сценариях, разумнее поместить его в отдельный файл.
Кстати, в поле url возможно сочетание ссылки на сценарий со встроенным кодом:
Script {
url [“http://foo.com/myScript.js”,
“javascript: