En esta entrada veremos como ejecutar una animación una sola vez, configurando su funcionamiento por código, y cuando esta animación termine, ejecutar otra animación en bucle.

Preparando la animación

Cuando Arthur dispara su lanza este realiza una animación y luego el arma es disparada. Para conseguir este “efecto” crearemos una animación y al terminar esta se lanzará el arma.

Abre la hoja de sprites de Arthur, que creamos en los capítulos anteriores.

Seleccionar hoja de sprites de Arthur

En la primera animación, NewAnimation, teníamos todos los sprites. Selecciónala, y luego selecciona las imágenes de Arthur lanzado el arma, pulsa el botón derecho del ratón, y en el menú emergente selecciona Create new animation from selection.

Seleccionar elementos para animación

Nombra la nueva animación con Shot

Renombrar animación

Programando la animación

Para gestionar la animaciones debes añadir dos unidades nuevas a la cláusula uses. Esta son: CastleSceneCore y X3DNodes.

Añadir CastleSceneCore y X3DNodes.

Crea una variable, en la sección private de la clase TmainView, llamada PlayerAnimationToLoop, la será de tipo String, y la usaremos para guardar el nombre la animación actual de Athur. Y que le servirá para luego recuperarla.

Declaración de PlayerAnimationToLoop

Añade un procedimiento a la sección Private que se llama PlayAnimationOnceAndLoop.

Declaración PlayAnimationOnceAndLoop

Este procedimiento tendrá los siguiente parámetros:

  • Scene. Indica la escena a la que pertenece la animación
  • AnimationNameToPlayOnce, indica la animación que se ejecutará una vez
  • AnimationNameToLoop, indica la animación que se ejecutará una vez termine la animación anterior.

El código de este procedimiento es como sigue:

Lo primero es crear un objeto de tipo TPlayAnimationParameters el cual nos sirve para configurar como funcionará la animación. A su propiedad Loop le asignamos el valor False de esta manera la animación solo se ejecutará una vez. Le asignamos el nombre que hemos recibido por parámetros en su propiedad Name. En el evento StopNotification le asignamos un procedimiento llamado OnAnimationStop. Guardamos el nombre de la animación pasada por parámetro en la variable.

PlayerAnimationToLoop. Y por último, a la escena pasada por parámetros le indicamos que ejecute una animación, según los parámetros que hemos preparado.

Por supuesto, al final de todo se libera el objeto.

El procedimiento OnAnimationStop es muy sencillo.

Simplemente indicamos a la escena pasada por parámetros, se ejecute la animación PlayerAnimationToLoop, la cual hemos guardado antes en el procedimiento PlayAnimationOnceAndLoop, y que lo haga de modo continuo.

Solo nos queda modificar en la rutina Update, la línea que para la animación de Arthur si velocidad en el eje X es cero o no está en el suelo. Y dentro de este condicional añade la condición que solo detenga la animación si puede disparar.

De otra manera, nunca se podría ver la animación ya que esta línea detendría la animación.

Tienes todo el código fuente en el github.

Saludos

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio esta protegido por reCAPTCHA y laPolítica de privacidady losTérminos del servicio de Googlese aplican.

El periodo de verificación de reCAPTCHA ha caducado. Por favor, recarga la página.