7.1. Script (Скрипт, сценарий).
Полный синтаксис узла:
Script {
exposedField MFString url []
field SFBool directOutput FALSE
field SFBool mustEvaluate FALSE
а также любые из следующих полей:
eventIn Type name
field Type name default
eventOut Type name
}
Этот узел позволяет создавать новые узлы со своим набором полей, входных и выходных событий.
Мы перечисляем набор полей, входных и выходных событий, которые мы бы хотели определить. Поле типа exposedField мы определить не можем.
Назначение полей:
- url – здесь определяется сценарий (программа).
Это делается одним из трех способов:
1) можно использовать откомпилированную программу на Java; в этом случае в поле url указывается название внешнего файла.
например:
url ”abc.class”
2) можно использовать код, написанный на языке JavaScript из внешнего файла (с расширением .js).
например:
url ”abc.js”
3) можно включать код, написанный на языке JavaScript, непосредственно в поле url.
например:
url ”javascript:
…
<программа>
…
”
- mustEvalute – если значение этого поля = TRUE, то посланные узлу события обрабатываются в первую очередь. При значении этого поля равном FALSE, если появляется несколько событий одновременно, браузер строит все появившиеся события в очередь, и обрабатывает в той последовательности, которую сочтет наиболее эффективной.
- directOutput – если значение этого поля = TRUE, то браузер для данного узла игнорирует цепочку событий, и помещает значения непосредственно в поля тех узлов, которые доступны узлу Script.
При написании программы в поле URL основной задачей является связь входных событий узла Script с выходными. Эта программа состоит из функций, каждая из которых вызывается в определенный момент времени. Функции, соответствующие именам входных событий, определенных в узле, вызываются при появлении этих событий. Функция initialize() вызывается, как только завершается загрузка мира. Когда завершается работа со сценой, вызывается функция shutdown(). Функция eventProcessed() вызывается после обработки ряда событий (как часто будет вызываться эта функция, определяется браузером). Чтобы послать исходящее событие из узла Script, нужно присвоить в программе значение для имени этого события.
Например:
Script {
eventIn SFTime touchTime_f # определяем
eventIn SFTime touchTime_b # 2 входящих события
field SFInt32 number 10 # определяем переменную number
# с начальным значением 10
eventOut SFInt32 output # определяем одно выходящее событие
url “javascript:
# эта функция вызывается сразу после завершения загрузки сцены
function initialize() {
output = 0;
out_light=FALSE;
}
# эта функция вызывается при