Paths

En la mayoría de los juegos avanzados a menudo se suelen asignar ciertas trayectorias a las instancias. Aunque puedes conseguirlo utilizando alarmas o código, es bastante complicado. Los recursos de trayectoria (path) son un mecanismo mucho más simple. La idea es bastante sencilla: Defines una trayectoria, dibujándola. Una vez hecho esto puedes situar una acción en el evento Create  del objeto para que este siga esa trayectoria en particular. En este capítulo explicaremos este procedimiento al detalle.

 

Definiendo paths

Para añadir una trayectoria a tu juego, escoge Add Path en el menú Add. Aparecerá la siguiente ventana (en este ejemplo ya añadimos una pequeña trayectoria):

 

 

En la parte superior izquierda puedes especificar el nombre del path. Debajo encontrarás los puntos que definen el path. Cada punto tiene una posición y velocidad asignadas (indicado con sp). Dependiendo de cómo utilices la trayectoria, la posición puede ser absoluta o no. La instancia para la que después utilizaras la trayectoria la seguirá a ese punto especificado, o si es relativa, la instancia siempre empezará en la primera posición del path, y lo seguirá a partir de ahí. La velocidad es interpretada de la siguiente manera. Un valor de 100 significa la velocidad original de la instancia. Un valor menor reduce la velocidad, un valor más alto la incrementa (esto indica el porcentaje de la velocidad real). La velocidad debe ser interpretada de la siguiente manera: Un valor de 100 indica un 100% de la velocidad original definida para la trayectoria cuando se la asignamos a la instancia. Un valor menor, reduce esta velocidad, y un valor mayor la aumenta (siempre porcentualmente). La velocidad se interpolará entre los diferentes puntos, por lo que la velocidad cambiará de forma gradual.

 

Para añadir un punto presiona el botón Add. Se realizará una copia del punto seleccionado. Ahora puedes modificar la posición y la  velocidad cambiando los valores en las ventanas de edición. Cuando seleccionas un punto en la lista, también puedes cambiar sus valores. Presiona Insert para insertar un nuevo punto antes del seleccionado, y Delete

para borrar el punto seleccionado. Finalmente, puedes usar Clear para borrar completamente el path.

 

A la derecha del formulario verás la trayectoria actual. El punto rojo indica el punto de control seleccionado. Los puntos azules, son todos los demás. El cuadrado verde indica la posición donde comienza la trayectoria. También puedes cambiar el path usando el ratón. Pulsa con el ratón sobre la imagen para agregar un punto. Pulsa sobre un punto existente y arrástralo para cambiar su posición. Cuando mantienes <Shift> mientras pulsas el botón izquierdo del ratón, insertas un punto. Por ultimo, puedes usar el botón derecho para borrar puntos. (Date cuenta de que de esta manera no puedes cambiar la velocidad.)

 

Normalmente los puntos se alinean con una cuadricula. Puedes cambiar sus características en la parte superior de la barra de herramientas. también puedes indicar aquí si se muestra la cuadrícula o no. Si quieres posicionar un punto de forma precisa, presiona la tecla <Alt> mientras lo añades o lo arrastras.

 

Puedes influir la forma de la trayectoria de dos formas. Primero puedes definir el tipo de unión entre los puntos. Puedes escoger líneas rectas o curvas. En segundo lugar, puedes indicar que pasa cuando se llega al último punto. Existen varias opciones. La más común es continuar moviéndose hacia el primer punto, cerrando el path (move to start). También puede dejar de moverse (stop moving), saltar al primer punto (jump to start), o invertir la trayectoria (reverse). La opción final (continue) reinicia el path desde la posición actual. De esta manera el path va a “avanzar”. Sólo se  muestran las primeras cinco repeticiones, pero el path continúa más allá.

 

Sobre la barra de herramientas tenemos varios controles importantes. De izquierda a derecha estas son sus funciones: El primer botón indica que estas preparado y quieres cerrar el formulario, guardando los cambios (si quieres descartar los cambios, pulsa sobre la cruz para cerrar la ventana e indica que no quieres guardarlos). El siguiente es el botón de deshacer, para corregir el último cambio. Los siguientes botones te permiten borrar la trayectoria, invertir su sentido, deslizarla de un lado a otro, voltearla horizontal o verticalmente, rotarla y cambiar su tamaño. Los siguientes botones son para mover la vista (no la trayectoria en si, el área de la vista esta indicado en la barra de estado abajo del todo) y para centrarla.

 

Como ya hemos indicado antes, puedes definir después los valores de la cuadrícula y cuando se muestra o no. Por ultimo, existe un botón que indica si quieres ver un fondo en particular como fondo de la trayectoria. De esta forma es fácil colocar la trayectoria en un lugar determinado del room, como por ejemplo en una pista de carreras, de forma que las instancias puedan seguir después la ruta correcta (esto solo se aprecia cuando utilizas trayectorias absolutas).

 

Asignando paths a los objetos

Para asignar una trayectoria a una instancia de un objeto, puedes asignar la acción “path” en algunos eventos, por ejemplo en el evento “create”. En esta acción debes especificar la trayectoria que quieres de una lista desplegable. También hay otros dos valores que debes proporcionar.

 

Primero la velocidad a la que el path será recorrido (speed) en píxeles por paso. Cuando la velocidad es positiva, la instancia comienza al principio de la trayectoria. Si es negativa, comienza al final.  Recuerda que cuando defines la trayectoria tu mismo especificas la velocidad real, relativa a la velocidad indicada aquí (de forma porcentual). también hay una acción para cambiar la velocidad con que la trayectoria es recorrida. Puedes utilizarla para, por ejemplo, hacer que una instancia acelere o frene a lo largo de la trayectoria. Observa que la velocidad normal de la instancia es ignorada cuando se realiza la trayectoria. Tampoco la gravedad o la fricción tienen efecto sobre ella.

 

Más adelante debes especificar que sucede cuando se alcanza el final de la trayectoria. Puedes elegir parar el movimiento y terminar la trayectoria, comenzar de nuevo desde el inicio (saltando de nuevo a la posición inicial donde se inicio la trayectoria) o volver a comenzar desde la última posición. Por ultimo, puedes optar por invertir la trayectoria.

 

Finalmente, puedes indicar si la trayectoria es absoluta o relativa. Una trayectoria absoluta es ejecutada en el lugar del nivel donde fue definida. La instancia se coloca en la posición inicial y comienza su movimiento desde allí (en la posición final si la velocidad es negativa). Esto es útil cuando, por ejemplo, tienes una pista de carreras sobre la que has definido la trayectoria. Cuando eliges una trayectoria relativa, las instancias comienzan a recorrer la trayectoria desde donde se encuentren. Esto es útil cuando una instancia debe hacer una trayectoria local, por ejemplo, las naves de “Space Invader” pueden hacer unos giros en particular desde su posición.

 

 

Cuando deseas colocar la instancia en un punto diferente a lo largo de la trayectoria, puedes utilizar la acción para definir la posición dentro de la trayectoria. Una posición dentro de la trayectoria siempre se encuentra entre 0 y 1.  Un valor de 0 indica el inicio (que es lo más común). Un valor de 1 indica el final del path. Observa que en cada paso la variable direction es definida automáticamente en la dirección correcta a lo largo de la trayectoria. Puedes utilizar esta variable para orientar correctamente el sprite.

 

 

 

Cuando usas scripts o piezas de código tienes más control sobre la forma en que el path es ejecutado. Existe una función para iniciar una trayectoria para una instancia. La variable path_position indica la posición actual del path. (Entre 0 y 1 como se indicó anteriormente). La variable path_speed indica la velocidad la velocidad con que se recorre la trayectoria del path. La variable path_scale puede ser usada para escalar el path. Un valor de 1 indica la escala real. Un valor mayor indica que el path será más grande, mientras que uno menor lo reducirá. La variable path_orientation indica la orientación en que el path es recorrido (derecha o izquierda). Esto permite que puedas realizar trayectorias en diferentes orientaciones (Ej. Moviéndose arriba y abajo en vez de izquierda y derecha.)

 

Finalmente, existen muchas funciones para conocer las propiedades de las trayectorias (coordenadas X e Y por ejemplo) y existen funciones para crear nuevas trayectorias.

 

También existen funciones que crean trayectorias libres de colisiones para que la instancia alcance una meta determinada. Lee las secciones posteriores sobre GML para más detalles.

 

Tal vez te preguntes que pasa cuando la instancia colisiona con otra instancia mientras este sigue una trayectoria. Básicamente sucede lo mismo que cuando la instancia se mueve con una velocidad determinada. Si la otra instancia es sólida la instancia se detendrá en la última posición antes del choque. (Asumiendo que existe un evento de colisión definido.) La variable path_position se detendrá aquí. Cuando la instancia que se encuentra en su camino deja de interceptar la trayectoria, continuara recorriéndose la trayectoria. Para manipular las trayectorias tu mismo, la variable path_positionprevious puede ser útil. Esta variable guarda la última posición de la trayectoria y puedes definir la posición de la trayectoria a este punto para parar el avance de la misma.

 

El evento path

Como se describió antes, puedes indicar que sucede cuando la instancia llega al fin de la trayectoria. En este momento se ejecuta el evento End of path. Puedes encontrarlo dentro del evento Other. Aquí puedes añadir más acciones. Por ejemplo, podrías destruir la instancia, o asignarle un path diferente.