Funciones Corporales

En este momento ya conoces suficiente ECMAscript como para comenzar a crear scripts que te resulten de utilidad. Este capítulo del tutorial tratará de la estructura que debe tomar un script cualquiera, explicando como se integra todo para funcionar en conjunto. ¡Al final de éste, podrás comenzar a escribir directamente tus scripts! Lo cual es bueno...

La estructura de un script

Lo primero que vamos a mirar es la estructura de un script. Ya hemos visto el nodo script, y ya sabes un poquito de ECMAscript, de modo que no creo que encuentres ningún problema. Un script de VRML consiste básicamente en un conjunto de funciones que se ejecutan en un momento determinado. Todas las funciones en el script tienen acceso a los campos y eventos definidos en el nodo Script.

url "javascript:
   function initialize() {
      // Código de inicialización
   }
   function shutdown() {
      // Código de finalización
   }
   function eventsProcessed() {
      // Código de captura de eventos.
   }
"

Anteriormente teníamos una estructura muy general para la definición del script. Ahora echemos un vistazo a algunas de las funciones que tendrás en tus scripts.

Inicio y Cierre

En primer lugar, echaremos una mirada a la función initialize(). Es llamada en el momento de cargar el escenario e inmediatamente antes de mostrarlo. El escenario acaba de cargarse en el momento en que esta función se ejecuta. La función se declara tal y como se muestra abajo:

function initialize() {
   // código de comienzo 
}

Las declaraciones que quieras ejecutar en el comienzo van dentro del cuerpo de la función, en lugar del comentario.

Al igual que hay una función de apertura, hay otra de cierre. Se ejecuta cuando se cierra la ventana del navegador, cuando se carga otro escenario, o en general cuando el escenario que contiene esta función se descarga.

function shutdown() {
   // código de finalización
}

Esto es útil para aclarar cualquier enredo que el script pueda haber dejado. No necesitarás usarlo muy a menudo: sólo cuando empieces a hacer cosas bastante complejas.

Captura y manejo de eventos.

Vamos ahora al fragmento de verdadera utilidad: la gestión de eventos. Sus scripts reaccionarán siempre al mundo externo, recibiendo eventIns de otros nodos. Vas a necesitar algún código que se ejecute cuando se reciban estos eventos. Éstas son las funciones de gestión de eventos. Tomemos un ejemplo pequeño para ver cómo va esto.

Script {
   eventIn SFTime touchTime
   url "javascript:
      function touchTime (valor, tiempo) {
         // Gestión de eventos
      }
   "
}

En este ejemplo, puedes ver que la función de gestión de eventos tienen el mismo nombre que el eventIns a que corresponde. Tiene dos parámetros que puedes llamar como quieras, pero yo he usado valor y tiempo. el valor es el valor del evento recibido, y tiempo es el momento de recepción del evento. En este ejemplo, cuando se recibe un evento de un touchTime, el código de la función touchTime se ejecuta. Todo muy sencillo hasta ahora.

el eventsProcessed y eventOuts

Hay una par de cosas más que cubrir. Primero, la función eventsProcessed () es otra función común. Se la llama después de que un grupo de eventos se ha procesado. Desafortunadamente, muy a menudo ocurre que esto dependa del navegador. En general, si tienes que realizar algún cálculo que no deba realizarse cada vez que reciba un evento, pon ese cálculo aquí.

function eventsProcessed() {
   // código ejecutado al final la recepción de eventos
}

Solo una cosa más: ¿Cómo enviamos eventos a través de ECMAScript? Es muy, muy facil. Incluso comparándolo con el resto del capítulo:

Script {
   eventOut SFInt32 choice
   url "javascript:
      function initialize() {
         choice = 2;
      }
   "
}

Para enviar un eventOut, simplemente asigna un valor al nombre del eventOut. Es increíblemente fácil. Este es el motivo por el que enseño primero ECMAScript, Java es ligeramente más complejo.

La Función Disfunción

Bueno, esto ha cubierto la estructura básica de un script VRML. He mostrado las funciones que usarás con frecuencia en tus scripts, y cómo puedes manejarlas. Este es el ejemplo para este capítulo y es el código que le acompaña. Cuando el Script comienza, la función initialize() escribe un mensaje en la consola y manda la cadena "ready..." al nodo text. Cuando pulses el botón en el TouchSensor, se enviará un evento al script, y se ejecutará la función touchTime (). Esto escribe la cuenta del numero de veces que se recibe un evento touchTime, pasada (la cuenta) a una cadena temporal de texto, con un mensaje por consola. El eventsProcessed escribe el número de veces que se ha llamado en la cadena temporal, que es entonces el output del nodo Text. Por consiguiente, cada vez que se ejecuta la función eventsProcessed (), el texto del escenario se actualiza. Si se llama al eventsProcessed después de cada touchTime (), los números serán el mismo, de otra manera serán diferentes, y tendrás que pulsar el botón para actualizar el resultado. Esto muestra cómo su navegador trata el eventsProcessed ().

NOTA: El ejemplo hace uso de la función print() para imprimir en la consola de VRML. Sin embargo, no todos los navegadores de VRML soportan esta función. Si tienes problemas con esto, prueba este ejemplo alternativo y ojea el código. También, por favor escríbeme y dime qué navegador estás usando y el error de que informa. ¡Gracias!

En el próximo capítulo, vamos a cubrir la relación entre VRML y tipos de ECMAScript. Vamos a necesitar una leve introducción también a los objetos. ¡Hasta entonces!