Alice 3.1 – Como transformar la postura de un objeto en el Scene Editor en código

En Alice no está previsto que a partir de una determinada postura de un objeto en el Scene Editor se pueda extraer de manera cómoda su equivalente en código. Si el usuario quiere reproducir esa postura en el programa, debe codificar todos los movimientos que fueron necesarios para lograrla e introducir esas sentencias.

Parece que esa “carencia” fue establecida de manera intencionada por el equipo de Alice con el fin de que los usuarios tuvieran que pensar por ellos mismos cómo conseguir los movimientos de los objetos. Sin embargo, por lo menos en la versión 3.1, hay una forma de conseguir transformar de manera sencilla una posición de un objeto en el Scene Editor en código. Es un tanto rudimentaria pero efectiva.

PosicionEnEditCodeUna vez que colocamos el objeto en una determinada posición en la escena y queremos repetirla en nuestro programa, nos encontramos con el problema de definir en forma de sentencias los movimientos efectuados con los controles Default, Rotation, Traslation y Resize. Nos vemos obligados a tratar de reproducir cada giro o movimiento mediante los procedimientos “one shots” y simultaneamente ir transportándolo al código.

Hay una manera que en algunos casos nos puede ayudar a ganar tiempo, sobretodo cuando queremos reproducir una postura muy elaborada. Tiene que ver con uno de los procedimientos que ejecuta Alice para preparar la escena con anterioridad a ejecutar el código del usuario.

Al pulsar Run, Alice crea todos los objetos que el usuario puso en la escena y además establece para cada uno de ellos una posición y una orientación respecto al objeto en que está anclado (propiedad vehicle) que por defecto es la propia escena (this).

El procedimiento al que me estoy refiriendo es el performGeneratedSetup. Por defecto no está a la vista, pero es posible acceder a él, En esta otra entrada está se muestra como añadir una pestaña con el performGeneratedSetup en el Code Editor

Con nuestro objeto en la posición y postura deseada en el Scene Editor, el performGeneratedSetup en una pestaña del Code Editor (y a ser posible que no haya ningún código en MyFirstMethod o esté desactivado) pulsamos el botón Run, lo que hará que el código del performGeneratedSetup se genere de nuevo. Vamos a la parte final, y después de las sentencias que inicializan los objetos ground y camera encontramos las de nuestro objeto, en este caso un objeto teenPerson de los SIMS.

CodigoperformGeneratedSetup

Ahora nos vamos a fijar en tres tipos de sentencias:

setPositionRelativeToVehicle: permite colocar un objeto en una posición determinada por sus tres coordenadas espaciales (x=right, y=up, z=backward), que coinciden con las mostradas en el Scene Editor

SetPositionRelativeToVehicle

 

setOrientationRelativeToVehicle: orienta un objeto en base a cuatro coordenadas llamadas x,y,z,w. Son los cuaterniones y es una manera de experesar la orientación y la rotación de un objeto.

Con estos dos procedimientos, que pueden ser aplicados tanto a un objeto como a cada una de sus articulaciones (joints) es posible fijar en pocas líneas de código la posición y postura de cualquier objeto. Sin embargo no están accesibles para el usuario en el Methods Panel.

Utilizando el clipboard (el cuadrado blanco arriba a la derecha) podemos copiarlas en él (botón derecho, Copy to clipboard) y pasarlas posteriormente a cualquier procedimiento nuestro. En este ejemplo se ha creado el procedimiento MiPostura. Cada vez que es llamado, el teenPerson se coloará en esta postura, independientemente de la posición en que se encuentre.

Al arrastrar las sentencias a nuestro procedimiento vemos que la parte del objeto queda en rojo. Hay que cambiarlo a this en cada una de ellas.

MiPostura1

MiPostura3

Y también meter todas las sentencias en un do together para que se ejecuten juntas

MiPostura6

Ahora si pulsamos en el Botón de Clases y miramos en TeenPerson ya vemos nuestro procedimiento MiPostura listo para ser utilizado cuando queramos

MiPostura5

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: