Un Cambio Es Tan Bueno Como El Descanso |
Este capítulo va a cubrir los nodos bindable (ligables, atables). No son nuevos, sólo la manera de usarlos será nueva. Ciertos nodos que afectan a la apariencia general y al comportamiento del mundo son llamados bindable. estos nodos pueden estar ligados (bound) y desligados (unbound). Cuando un nodo está ligado, los valores que contiene afectan el estado del mundo. Cuando un nodo está desligado, debe ligarse otro nodo del mismo tipo, para que este otro nodo afecte al mundo. De esta manera, puedes cambiar diferentes aspectos para un mismo mundo eligiendo cual de los nodos está ligado.
Ya hemos visto todos los nodos bindable, por lo que deberías saber lo que hacen. Son lo siguientes.
Como verás, ya nos hemos encontrado antes con ellos, y como sabes, afectan a la apariencia global y al comportamiento del mundo. Este es el momento de averiguar el funcionamiento interno de un nodo bindable, y cómo trabaja todo.
El Bind Stack
Vale. El navegador tiene cuatro estructuras dentro de su funcionamiento interno, una para cada tipo de nodo bindable. Éstas se llaman Bind Stack (la "pila de ligaduras"). Cuando se interprerta un archivo VRML, el primer nodo que se encuentra dentro del archivo pasa a la cabeza de la pila, y el resto pasan abajo de la pila. En nodo que está ligado (el que está activo) es el que está en la cabeza de la pila. Una vez que el mundo se ha cargado en el navegador, podemos manipular la pila con un cierto juego de eventos.
Los Nodos ligados
Todos los nodos bindable tienen un par de eventos en común. Todos tienen el eventIn set_bind y el eventOut isBound. Ambos son valores SFBool. Cuando envías un evento set_bind con valor TRUE a un nodo bindable, le llevas a la cabeza de la pila, y pasa a ser un nodo ligado (bound). De esta manera, este nodo enviará un evento isBound a TRUE. El nodo que estaba en la cabeza de la pila (y ya no lo está) envía un isBound FALSE con el mismo timestamp. La única excepción es si el nodo al que se envía un set_bind estaba ya en la cabeza de la pila: no pasaría nada, y no se enviaría ni recibiría ningún evento.
Si envías un evento set_bind FALSE a un nodo, será eliminado de la pila. Si es el nodo ligado, enviará un isBound FALSE y el próximo nodo de la pila pasará a la cabeza.
Si envias eventos set_bind a un nodo que ha sido eliminado de la pila, no ocurre nada. Si un nodo es eliminado, actúa como si fuese enviado un evento set_bind FALSE.
Usando nodos Bindable.
Ahora que sabes usar los nodos bindable, ¿para qué sirven? Bien, cambiar el fondo y los tipos de niebla es bastante útil de por sí, como podrás imaginar. También, usando nodos NavigationInfo diferentes, puedes redimensionar tu avatar, cambiar el tipo de movimiento, esa clase de cosas.
Sin embargo, el nodo más útil es Viewpoint. Si ligas al usuario a un Viewpoint, éste se moverá allí al instante en el estilo definido por el nodo. Esto significa que puedes tener Scripts que conducen al usuario alrededor del mundo, ligandolo a Viewpoints diferentes. Otro efecto de ligar a un Viewpoint es determinar la posición del usuario en la jerarquía de las transformaciones. Así, si estás moviendo un objeto a través del mundo, y ligas al usuario a un Viewpoint que está agrupado junto con ese objeto, el usuario se animará al mismo tiempo que el objeto.
Totalmente Descansado...
Este ejemplo y su código asociado muestra los usos de los nodos bindable. Toda la interacción del usuario se hace con bindables, sin ningún tipo de scripts. La pequeña esfera amarilla es un interruptor que liga temporalmente al usuario a un Viewpoint en la plataforma animada que gira alrededor del escenario. El efecto sólo es temporal, dado que el TouchSensor genera un evento FALSE cuando se suelta el botón y le devuelve a donde estaba. Esto puede arreglarse, pero necesitamos para ello un pequeño Script. Entretanto, aprieta el botón para conseguir el efecto. Los tres interruptores de color intercambian temporalmente lon nodos Background de de la misma manera.
Muy bien, entonces, éso es todo lo que necesitas saber sobre los nodos bindable. El próximo capítulo voy a dar una introducción breve al nodo Script y cómo usarlo en tus mundos. No vamos a cubrir cómo hacer un script, sólo cómo introducirlo en tus mundos.