This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revision | |||
es:orx:tutorials:anim [2017/05/30 00:50 (8 years ago)] – external edit 127.0.0.1 | es:orx:tutorials:anim [2020/08/19 21:12 (5 years ago)] (current) – Old content sausage | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Tutorial de Animaciones ====== | ||
- | ===== Resumen ===== | ||
- | |||
- | Veasé los anteriores [[main# | ||
- | |||
- | Este tutorial solo cubre un uso muy básico de las animaciones en orx. | ||
- | |||
- | Todas las animaciones son guardadas en [[http:// | ||
- | Este gráfico define todas las posibles transisiones entre animaciones. Una animación es referenciada usando un único caracter de cadena. Todas las transiciones y animaciones son creadas via ficheros de configuración. | ||
- | |||
- | Cuando se solicita una animación, el motor evaluará la cadena que lo traerá a esta animación desde la actual.\\ | ||
- | Si esa cadena existe, a continuación se procesará automáticamente. El usuario será notificado cuando se inician las animaciones, | ||
- | Si no especificamos ninguna animación como objetivo, el motor va a seguir los enlaces naturalmente, | ||
- | También hay una manera de saltarse este procedimiento de encadenamiento y forzar una animación inmediatamente. | ||
- | |||
- | El Código-sabio de este sistema es muy fácil de usar con dos funciones principales para manejar todo. La mayoría del trabajo se realiza no en el código, sino en los archivos de configuración cuando se definen las animaciones y enlaces. | ||
- | ((Un gráfico de animación muy básica será utilizada para este tutorial: lo hicimos a fin de mantener limitada la cantidad de datos de configuración necesarios.)) | ||
- | |||
- | ===== Detalles ===== | ||
- | |||
- | Como de costumbre, comenzamos por la carga de nuestro archivo de configuración, | ||
- | Por favor, consulte los [[Main# | ||
- | |||
- | Ahora comencemos con el codigo, veamos como organizar los datos hasta el final de esta página.\\ | ||
- | En nuestra función '' | ||
- | Cuando ninguna entrada está activa, simplemente removemos el objetivo de animación y dejamos que el gráfico sea evaluado normalmente((en nuestro caso, va a reproducir la animación de inactividad correspondiente, | ||
- | |||
- | <code c> | ||
- | { | ||
- | orxObject_SetTargetAnim(pstSoldier, | ||
- | } | ||
- | else if(orxInput_IsActive(" | ||
- | { | ||
- | orxObject_SetTargetAnim(pstSoldier, | ||
- | } | ||
- | else | ||
- | { | ||
- | orxObject_SetTargetAnim(pstSoldier, | ||
- | }</ | ||
- | |||
- | ¡Así es! Cómo se llega desde cualquier animación actual al objetivo que será evaluado usando el gráfico. Si las transiciones son necesarias se van a reproducir automáticamente ((recordar que en nuestro caso nos fuimos por el camino más recto, sin animaciones de giro, por ejemplo; pero eso no iba a cambiar nuestro código en absoluto!)). | ||
- | |||
- | //PD: Si hubiéramos querido ir inmediatamente a otra animación sin respetar las transiciones definidas por datos (en el caso de las animaciones de golpe o muerte, por ejemplo), podríamos haber hecho esto.// | ||
- | |||
- | <code c> | ||
- | |||
- | //PD: Hay mas funciones para el control avanzado de animaciones (como pausando, cambiando frecuencia, ...), pero el 99% del tiempo, esas dos funciones ('' | ||
- | |||
- | Veamos ahora como podemos estar informados de que sucede con nuestras animaciones (como sincronizar sonidos, por ejemplo).\\ | ||
- | Primero, necesitamos registrar nuestra devolución de llamada(callback) '' | ||
- | |||
- | <code c> | ||
- | |||
- | Hecho! Veamos que podemos hacer con esto ahora.\\ | ||
- | |||
- | Digamos que desea imprimir que animaciones son reproducidas, | ||
- | |||
- | <code c> | ||
- | { | ||
- | orxANIM_EVENT_PAYLOAD *pstPayload; | ||
- | |||
- | pstPayload = (orxANIM_EVENT_PAYLOAD *)_pstEvent-> | ||
- | |||
- | switch(_pstEvent-> | ||
- | { | ||
- | case orxANIM_EVENT_START: | ||
- | orxLOG(" | ||
- | break; | ||
- | |||
- | case orxANIM_EVENT_STOP: | ||
- | orxLOG(" | ||
- | break; | ||
- | |||
- | case orxANIM_EVENT_CUT: | ||
- | orxLOG(" | ||
- | break; | ||
- | |||
- | case orxANIM_EVENT_LOOP: | ||
- | orxLOG(" | ||
- | break; | ||
- | } | ||
- | |||
- | return orxSTATUS_SUCCESS; | ||
- | }</ | ||
- | |||
- | En primer lugar, obtener la capacidad de carga de nuestro evento. Como sabemos sólo manejamos los eventos de animación aquí, podemos con seguridad emitir la capacidad de carga de '' | ||
- | |||
- | Si estamos usando la misma rutina para diferentes tipos de eventos, lo primero que deberíamos ver es si estábamos recibiendo un evento animación. Esto puede hacerse con el código siguiente. | ||
- | |||
- | <code c> | ||
- | |||
- | Finalmente, nuestro evento receptor ('' | ||
- | |||
- | Ahora vamos a echar un vistazo al lado de los datos. | ||
- | |||
- | En primer lugar, tenemos que definir un set de animación que va a contener todo el gráfico para animaciones de nuestro objeto específico.\\ | ||
- | El set de animación nunca se duplicará en la memoria y contendrá todas las animaciones y enlaces para el correspondiente graficado.\\ | ||
- | En nuestro caso tenemos 4 animaciones y 10 posibles enlaces para todas las transiciones. | ||
- | |||
- | <code ini> | ||
- | AnimationList = IdleRight# | ||
- | |||
- | LinkList = IdleRightLoop# | ||
- | |||
- | Ahora definamos nuestras animaciones! =) | ||
- | |||
- | Anterior a eso, a fin de reducir la cantidad de texto que tenemos que escribir, vamos a utilizar la herencia del sistema de configuración de orx.\\ | ||
- | Vamos a comenzar a definir una sección para la posición de nuestro pivote ((también llamado '' | ||
- | Como usted pudo haber visto en el [[object|tutorial de objeto]] en su archivo de configuración, | ||
- | El pivote se puede definir literalmente usando palabras clave, como '' | ||
- | |||
- | <code ini> | ||
- | Pivot = (15.0, 31.0, 0.0)</ | ||
- | |||
- | Ahora vamos a definir nuestro objeto gráfico que heredará de este pivote. En nuestro caso se trata de un mapa de bits que contiene todos los fotogramas de nuestro objeto.\\ | ||
- | Las propiedades comunes son por lo tanto el nombre del archivo de mapa de bits y el tamaño de un fotograma ((que no tiene que mantenerse constante, pero por lo general es más fácil para los artistas y eventualmente sea un obstáculo para algunos otros motores y bibliotecas)) | ||
- | |||
- | <code ini> | ||
- | Texture | ||
- | TextureSize = (32, 32, 0)</ | ||
- | |||
- | Ok, está todo preparado para la creación de todos los fotogramas.\\ | ||
- | Vamos a definir todos nuestros fotogramas, para ambas animaciones orientadas a la derecha: tenemos 6 de ellas. | ||
- | |||
- | <code ini> | ||
- | TextureCorner = (0, 0, 0) | ||
- | |||
- | [AnimRight2@FullGraphic] | ||
- | TextureCorner = (0, 32, 0) | ||
- | |||
- | [AnimRight3@FullGraphic] | ||
- | TextureCorner = (0, 64, 0) | ||
- | |||
- | [AnimRight4@FullGraphic] | ||
- | TextureCorner = (32, 0, 0) | ||
- | |||
- | [AnimRight5@FullGraphic] | ||
- | TextureCorner = (32, 32, 0) | ||
- | |||
- | [AnimRight6@FullGraphic] | ||
- | TextureCorner = (32, 64, 0)</ | ||
- | |||
- | Como puedes ver, ellas todas heredan de '' | ||
- | OK, ahora vamos a definir todos esos objetos gráficos (todas ellas se convierten en estructuras '' | ||
- | Comencemos con el '' | ||
- | |||
- | <code ini> | ||
- | KeyData1 | ||
- | KeyDuration1 | ||
- | |||
- | Es bastante fácil, vamos a tratar con la segunda: '' | ||
- | |||
- | <code ini> | ||
- | DefaultKeyDuration | ||
- | KeyData1 | ||
- | KeyData2 | ||
- | KeyData3 | ||
- | KeyData4 | ||
- | KeyData5 | ||
- | KeyData6 | ||
- | |||
- | Realmente no es difícil definir el mismo tiempo para todos los fotogramas usando la propiedad '' | ||
- | Podemos sustituir a cualquier fotograma mediante la especificación de una duración de teclas tal como lo hicimos para la animación '' | ||
- | |||
- | Vamos a hacer exactamente lo mismo para las animaciones de orientación izquierda. En realidad lo que estamos utilizando objetos gráficos volteados, sólo podríamos haber volteado el objeto en tiempo de ejecución en el código.\\ | ||
- | Pero eso no hubiera servido a nuestros fines didácticos! Vamos a suponer que estas animaciones izquierda son completamente diferentes de las derechas! ;-) | ||
- | |||
- | Ahí están solamente los enlaces perdidos ahora y está hecho!.\\ | ||
- | La estructura de enlace básico es fácil: especificamos la fuente y la animación de destino. | ||
- | |||
- | <code ini> | ||
- | Source | ||
- | Destination = IdleRight</ | ||
- | |||
- | Este enlace viene desde la animación '' | ||
- | Entonces básicamente, | ||
- | Además, si ningún objetivo es definido cuando estamos allí, este enlace nos mantendrá en un ciclo ya que no hay ningún vínculo de mayor prioridad a partir de '' | ||
- | |||
- | Veamos ahora como vamos de '' | ||
- | |||
- | <code ini> | ||
- | Source | ||
- | Destination = WalkRight | ||
- | Property | ||
- | |||
- | Aquí tenemos la misma información básica, como antes, pero también tenemos el valor '' | ||
- | Esto significa que cuando estamos en la animación '' | ||
- | |||
- | Como hemos visto en el código, no preguntamos explícitamente por la animación de inactividad, | ||
- | Veamos el enlace que va desde '' | ||
- | |||
- | <code ini> | ||
- | Source | ||
- | Destination = IdleRight | ||
- | Property | ||
- | Priority | ||
- | |||
- | Cuando estamos en '' | ||
- | Por defecto la '' | ||
- | El nos traerá de regreso a '' | ||
- | También hemos añadido la propiedad '' | ||
- | |||
- | //PD: Esto es un gráfico muy básico que muestra solamente transiciones básicas, pero el sistema es muy expansible.\\ | ||
- | Digamos que usted quiere empezar a caminar desde una pausa sentado sin transición.\\ | ||
- | Pero, después en el desarrollo del juego, tu quieres añadir una transición de pie para que luzca más bonito.\\ | ||
- | Tu solamente tienes que añadir este paso extra (con los enlaces asociados) en el fichero de configuración! Tu código permanecerá sin cambios:// | ||
- | |||
- | <code c> | ||
- | ===== Recursos ===== | ||
- | |||
- | Código fuente: [[https:// | ||
- | |||
- | Fichero de configuración: |