En Alice la forma de manejar la cámara es a través del objeto camera. A continuación varios planos o movimientos que se pueden hacer con la cámara. He utilizado el procedimiento Caminar del que hablo en esta entrada, aunque valdría igual con una simple sentencia MOVE, ya que lo importante en este caso es el manejo de la cámara.
Lo que voy a contar se basa en este proyecto llamado UtilizacionCamara.a3p. Consiste únicamente en un personaje SIMS al que se ha llamado hombre, y un objeto billboard para construir el camino por el que va andando este hombre.
Y también se han creado tres marcadores de cámara llamados cameraMarker1, cameraMarker2 y cameraMarker3:
En primer lugar colocamos la llamada al procedimiento que hace que el personaje camine 50 pasos
Y en el evento keyPressListener es donde vamos a asociar el código de cada movimiento de cámara:
Travelling lateral
La cámara se desplaza con el hombre, acompañándolo en su movimiento. Esto se logra colocando la cámara en un punto lateral (en nuestro caso el cameraMarker1), enfocarla hacia el personaje y anclándola a él con la propiedad vehicle.
Sin embargo estas líneas de código no siempre sirven. En nuestro caso la intención es que el hombre vaya caminando y el usuario pueda alternar de una posición de cámara a otra con pulsaciones de teclas.
Como el hombre comienza a caminar desde una posición cercana al cameraMarker1, estas sentencias sólo funcionarán correctamente si se ejecutan al principio. Si dejamos pasar unos segundos antes de ejecutarlas, el hombre ya se habrá alejado de cameraMarker1 y habrá salido de nuestra vista.
La manera de que podamos entrar y salir del travelling lateral en cualquier momento será anclando la cámara no a un punto fijo del espacio, sino a un objeto que a su vez esté anclado al hombre y se mueva con él. Ese objeto auxiliar puede ser cualquier objeto de tamaño pequeño, por ejemplo una pelota, y puede hacerse invisible poniendo su propiedad Opacity a cero. Eso es lo que se ha hecho creando un objeto Volleiball renombrado como ObjetoAuxiliar1, situándolo en cameraMerker1 y anclándolo al hombre, todo desde el Scene Editor. El código para entrar y salir del travelling lateral será entonces:
El ObjetoAuxiliar1 siempre va a estar en la posición adecuada moviéndose con el objeto hombre. Así cada vez que se quiera volver al travelling lateral habrá que llevar la cámara con moveTo al ObjetoAuxiliar1, apuntar hacia nuestro objetivo y anclarla al hombre (aunque también se podría anclarla al ObjetoAuxiliar1). En el proyecto se ha asociado este código a la pulsación de la tecla “1”.
Plano fijo
Para dejar la cámara en un plano fijo sólo hay que llevarla al punto desde donde vamos a tomar el plano, apuntar al objetivo, y anclar la cámara a la escena (this)
Según el caso, a veces es conveniente apuntar con la cámara a la cabeza del hombre en lugar de apuntarla al objeto hombre, ya que el pivot point (el punto sobre el que se hacen las rotaciones), que es a donde se apunta, está en la base de los objetos.
Rotación de la cámara mientras sigue al objetivo
Un efecto interesante es cuando la cámara es capaz de seguir al objetivo, en este caso al hombre que camina, girando su orientación si es necesario.
Para conseguir este efecto es necesario crear una variable como propiedad del objeto Scene y utilizar el evento TimeListener.
1. Crear la variable: Desde la pestaña Scene se le da al botón Add Scene Property y se crea una variable de tipo WholeNumber. Le hemos llamado SeguirObjeto, inicializándola con al valor 0.
2. Crear un TimeListener: en la pestaña InitizlizeEventListeners, y en el procedimiento timeElapsed se mete este código, que se ejecutará de manera contínua varias veces por segundo
Lo que hace es comprobar si la variable SeguirObjeto tiene valor 1, en cuyo caso actualiza la orientación de la cámara hacia el objetivo. En nuestro proyecto se cambia alternativamente el valor de esta variable pulsanto la tecla correspondiente al número “0”.
No queda mucho más que contar. El resumen de teclas es entonces:
“0” –> modifica el valor de la variable SeguirObjeto, para que la cámara siga al hombre o se quede fija
“1” –> travelling lateral, utilizando el ObjetoAuxiliar1
“2” –> plano fijo desde el punto cameraMarker2. Si pulsamos “0” la cámara comenzará a rotar siguiendo al hombre
“3” –> vista panorámica de seguimiento desde cameraMarker3 con la variable SeguirObjeto activada.
Al pulsar run la cámara está fija en cameraMarket1. Pulsando las teclas de 0 a 3 se puede ir testando los planos descritos en esta entrada.