Tag Archives: caminar

Alice 3.1 – Utilización de la cámara

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.

Camara2

Y también se han creado tres marcadores de cámara llamados cameraMarker1, cameraMarker2 y cameraMarker3:

Camara3_CameraMarker1Camara4_CameraMarker2

 

 

 

 

 

 

 

 

 

 

Camara5_CameraMarker3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

En primer lugar colocamos la llamada al procedimiento que hace que el personaje camine 50 pasos

Camara1

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.

Camara6

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:

Camara7

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)

Camara8

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.

Camara9

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

Camara10

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.

 

 

 

 

 

 

Alice 3.1 – Como hacer el movimiento de caminar

En Alice es posible crear un procedimiento que permita que en general cualquier objeto tipo Biped pueda caminar, aunque seguramente los objetos idóneos para esto sean los de tipo SIMS.

Vamos a crear un procedimiento en la clase Biped que pueda ser llamado por cualquier objeto que descienda de dicha clase.

Desde el botón de clases se busca la clase Biped y se pulsa en “Add procedure”. Le llamamos Caminar, y le añadimos tres parámetros para aportarle flexibilidad, que son:

Pasos (WholeNumber): el número de pasos que va a dar el objeto. Por paso se entiende la sucesión de las seis fases de que consta el moviemiento codificado.

Velocidad (DecimalNumber): para regular la rapidez con que anda el objeto

Brazo (DecimalNumber): que regula la amplitud con la que se moverán los brazos al andar.

ProcedimientoCaminar1

El código va a tratar de imitar la forma humana de caminar. Lo que se conoce como gait cycle o ciclo de la marcha.

ProcedimientoCaminar2

He utilizado fundamentalmente las siguientes articulaciones (joints): hip (cadera), foot (pie), shoulder (hombro) y knee (rodilla)

ProcedimientoCaminar3

Este movimiento para caminar consta en primer lugar de una fase de adaptación para comenzar el movimiento en la que el personaje se coloca en posición de comenzar a andar. A continuación va un bucle con las seis fases que conforman el ciclo de la marcha y que están asociadas al parámetro Pasos.  El bucle se repite tantas veces como indique el parámetro Pasos. Una vez terminado el bucle hay otra fase para terminar el movimiento y volver a la posición de reposo.

ProcedimientoCaminar5

El procedimiento Caminar puede ser llamado desde MyFirstMethod o desde cualquier Event Listener.

ProcedimientoCaminar4

A continuación un enlace al proyecto de Alice 3.1 con un ejemplo del procedimiento Caminar:

Caminar.a3p

Si te animas a hacer una animación más realista que esta puede ayudar este enlace.

 

Alice 3.1 – Distribución aleatoria de objetos previa al programa

Este es un ejemplo para las ocasiones en las cuales nos interesa que algunos objetos se distribuyan al azar por la escena  los pasos son los siguientes:

1. Creación de los objetos que se van a distribuir de manera aleatoria

Creamos cinco objetos alien uno detrás de otro y dejando los nobres que llevan por defecto (alien, alien2, alien3, alien5 y alien5). Van quedando situados uno encima de otro de manera que se van a superponer en el mismo punto.

DistribucionAleatoria1

2. Creación del procedimiento

Vamos al panel de edición de código (Code Editor Panel) y creamos un procedimiento para la clase Scene. Pare ello en la pestaña Scene pulsamos “Add Scene Procedure” y le damos el nombre ColocacionAleatoria. Al darle OK aparece una uneva pestaña con el nombre de nuestro procedimiento. En “Add Parameter” añadimos un parámetro de tipo Double y le ponemos de nombre radio (será el radio de la circunferencia dentro de la cual vamos a distribuir nuestros objetos). A continuación se arrastra una instrucción “for each in” para recorrer todos los objetos que hay en un array. Este array lo creamos sobre la marcha cubriendo la ventana que aparece.

DistribucionAleatoria2

El nombre del array será “marcianos”

El tipo (item type) lo elegimos en la opción Gallery Class del desplegable. En la nueva ventana que aparece elegimos el tipo Alien.

El array lo creamos pulsando en la opción “Custom Array” del desplegable. En la nueva ventana pulsamos “Add” y vamos metiendo cada uno de los objetos alien creados anteriormente.

DistribucionAleatoria3 DistribucionAleatoria4

 

 

 

 

 

 

 

 

 

El procedimiento creado queda así:

DistribucionAleatoria5

3. Introducción del código del procedimiento

Ahora toca introducir las sentencias del código, que se ejecutará en cada uno de los cinco aliens que hemos metido en el array “marcianos”. En el “Methods Panel” ahora se pueden seleccionar los procedimientos asociados este array.

DistribucionAleatoria6

Para cada alien tenemos que elegir al azar un ángulo de giro y una distancia hacia adelante. Lo hacemos con turn y move.  A cada una de estas sentencias se les proporciona un valor aleatorio. A turn entre 0 y 1 vueltas y a move entre 0 y el parámetro radio que serán los metros que se mueva hacia delante en la dirección marcada por turn. Para ello se elige la opción Random.

DistribucionAleatoria7

4. Llamada a nuestro procedimiento desde el performCustomSetup

El performCustomSetup es un procedimiento que es llamado después de pulsar el botón Run pero antes de ejecutar MyFirstMethod y es el lugar idóneo para introducir el código relacionado con la puesta en escena antes de que nuestro programa entre en ejecución. Accedemos a él seleccionando this en el Methods Panel

ProcedimientosClaseScene

Hacemos clic derecho en el performCustomSetup y elegimos dicha opción en el desplegable que se abre. Aparecerá una nueva pestaña con este procedimiento.

DistribucionAleatoria8

Así es como queda una vez invocado el nuestro procedimiento

DistribucionAleatoria9

Y este es el resultado:

DistribucionAleatoria10DistribucionAleatoria11DistribucionAleatoria12DistribucionAleatoria13

 

 

 

 

 

 

El proyecto con el ejemplo en el sigiente enlace:

ColocacionAleatoria.a3p