This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| es:orx:tutorials:fx [2012/03/02 20:59 (14 years ago)] – [Detalles] zera | es:orx:tutorials:fx [2020/08/20 04:13 (5 years ago)] (current) – Old content sausage | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Tutorial de Efectos ====== | ||
| - | |||
| - | |||
| - | ===== Sumario ===== | ||
| - | |||
| - | Ver los anteriores [[main# | ||
| - | |||
| - | Este tutorial muestra que son los efectos(FXs) y como se crean. | ||
| - | |||
| - | FXs están basados en una combinación de curvas((con seno, triangulo, cuadrado o región linear)) aplicadas con diferentes parámetros como son escala, rotación, posición, velocidad, transparencia(alpha) y color. | ||
| - | |||
| - | Los FXs se establecen a travez del fichero de configuración requiriendo solamente una linea de código para aplicarselos a un objeto.\\ | ||
| - | Pueden existir hasta 8 curvas de cualquier tipo combinadas para formar un solo FX.\\ | ||
| - | Hasta 4 FXs pueden ser aplicados en el mismo objeto al mismo tiempo. | ||
| - | |||
| - | Los FXs pueden usar valores relativos o absolutos, dependiendo de el atributo '' | ||
| - | El control sobre la curva de periodo, fase y amplificación con el tiempo también está también garantizada.\\ | ||
| - | La posición y velocidad de los FXs, sus valores de salida pueden usar la orientación y/o escala con que fueron aplicados relativamente en sus respectivos objetos.\\ | ||
| - | Esto permite la creación de unos muy elaborados y bonitos FXs. | ||
| - | |||
| - | Los parámetros del FX pueden ser ajustados en el fichero de configuración y recargados en el aire(tiempo de ejecución) usando la tecla '' | ||
| - | Por ejemplo no puedes ajustar en el aire un circulo FX cuando ya fue definido con ese atributo en el fichero de configuración por defecto.\\ | ||
| - | Todos los demás FXs pueden ser mejorados mientras corre el tutorial. | ||
| - | |||
| - | Como siempre, los parámetros aleatorios pueden ser usados para permitir alguna variedad para los FXs.\\ | ||
| - | Por ejemplo, la escala de oscilaciones, | ||
| - | |||
| - | Registramos también los eventos del FX a mostrar cuando los FXs son reproducidos y detenidos.\\ | ||
| - | Como el FX es reproducido en la caja de objeto es identificado como cíclico, el nunca para. | ||
| - | Por lo tanto el correspondiente evento ('' | ||
| - | |||
| - | También mostramos brevemente como añadir algún dato personal del usuario a un '' | ||
| - | Lo recuperamos en un evento retorno de llamada (event callback) para bloquear el objeto cuando un FX comienza y lo desbloqueamos cuando el FX se detiene.\\ | ||
| - | Usamos este bloqueo para permitir solo un FX a la vez en el soldado.\\ | ||
| - | Solo descrito aquí para fines didácticos. | ||
| - | ===== Detalles ===== | ||
| - | |||
| - | Como es usual, empezamos por cargar nuestro fichero de configuración, | ||
| - | Por favor, referirse a los [[main# | ||
| - | |||
| - | Registramos entonces los eventos de entrada y efectos(FXs). | ||
| - | |||
| - | <code c> | ||
| - | orxEvent_AddHandler(orxEVENT_TYPE_INPUT, | ||
| - | |||
| - | Como puedes ver, estamos usando la misma llamada de retorno('' | ||
| - | |||
| - | Echemos un vistazo rápido a la estructura de datos de nuestro '' | ||
| - | |||
| - | <code c> | ||
| - | { | ||
| - | orxBOOL bLock; | ||
| - | } MyObject;</ | ||
| - | |||
| - | Y veamos ahora como se unen a nuestro soldado usando '' | ||
| - | |||
| - | <code c> | ||
| - | |||
| - | pstMyObject = orxMemory_Allocate(sizeof(MyObject), | ||
| - | pstMyObject-> | ||
| - | |||
| - | orxObject_SetUserData(pstSoldier, | ||
| - | </ | ||
| - | |||
| - | Necesitamos ver ahora como aplicamos FXs(efectos) en nuestra función '' | ||
| - | |||
| - | <code c> | ||
| - | |||
| - | if(orxInput_IsActive(" | ||
| - | { | ||
| - | zSelectedFX = " | ||
| - | } | ||
| - | else if(orxInput_IsActive(" | ||
| - | { | ||
| - | zSelectedFX = " | ||
| - | } | ||
| - | |||
| - | [...] | ||
| - | |||
| - | // No está bloqueado el soldado? | ||
| - | if(!((MyObject *)orxObject_GetUserData(pstSoldier))-> | ||
| - | { | ||
| - | if(orxInput_IsActive(" | ||
| - | { | ||
| - | orxObject_AddFX(pstSoldier, | ||
| - | } | ||
| - | }</ | ||
| - | |||
| - | Podemos ver como obtenemos nuestros datos asociados usando '' | ||
| - | |||
| - | Echemos un vistazo a nuestra función '' | ||
| - | Primero la parte de manejar la entrada, donde solo mostraremos que teclas están siendo usadas por cada entrada activa. | ||
| - | |||
| - | <code c> | ||
| - | if(_pstEvent-> | ||
| - | { | ||
| - | if(_pstEvent-> | ||
| - | { | ||
| - | orxINPUT_EVENT_PAYLOAD *pstPayload; | ||
| - | |||
| - | pstPayload = (orxINPUT_EVENT_PAYLOAD *)_pstEvent-> | ||
| - | |||
| - | if(pstPayload-> | ||
| - | { | ||
| - | orxLOG(" | ||
| - | } | ||
| - | else | ||
| - | { | ||
| - | orxLOG(" | ||
| - | } | ||
| - | } | ||
| - | }</ | ||
| - | |||
| - | Como puedes ver, mostramos una información dependiendo si se usa una sola tecla o una combinación.\\ | ||
| - | Solo usamos | ||
| - | Sin embargo orx soporta hasta combinaciones de 4 teclas para una sola entrada.\\ | ||
| - | '' | ||
| - | |||
| - | //PD: Esos son los nombres utilizados en el archivo de configuración para enlazar los botones de las teclas, ratón o joystick para las entradas.// | ||
| - | |||
| - | Veamos ahora como manejamos los eventos de FX. | ||
| - | |||
| - | <code c> | ||
| - | { | ||
| - | orxFX_EVENT_PAYLOAD *pstPayload; | ||
| - | orxOBJECT | ||
| - | |||
| - | pstPayload = _pstEvent-> | ||
| - | pstObject | ||
| - | |||
| - | switch(_pstEvent-> | ||
| - | { | ||
| - | case orxFX_EVENT_START: | ||
| - | orxLOG(" | ||
| - | |||
| - | if(pstObject == pstSoldier) | ||
| - | { | ||
| - | // Locks it | ||
| - | ((MyObject *)orxObject_GetUserData(pstObject))-> | ||
| - | } | ||
| - | break; | ||
| - | |||
| - | case orxSOUND_EVENT_STOP: | ||
| - | orxLOG(" | ||
| - | |||
| - | if(pstObject == pstSoldier) | ||
| - | { | ||
| - | // Unlocks it | ||
| - | ((MyObject *)orxObject_GetUserData(pstObject))-> | ||
| - | } | ||
| - | break; | ||
| - | } | ||
| - | }</ | ||
| - | |||
| - | Si un FX comienza en nuestro soldado simplemente lo bloqueamos usando nuestra estructura de datos. Reciprocamente, | ||
| - | |||
| - | Como hemos cubierto la parte del código, veamos como definimos los FXs mediante código-sabio.\\ | ||
| - | Primero echemos un vistazo a un simple FX: la rotación cíclica en la caja. | ||
| - | |||
| - | <code ini> | ||
| - | SlotList | ||
| - | Loop = true | ||
| - | |||
| - | [Rotate] | ||
| - | Type = rotation | ||
| - | StartTime | ||
| - | EndTime | ||
| - | Curve = sine | ||
| - | Pow = 2.0 | ||
| - | StartValue | ||
| - | EndValue | ||
| - | |||
| - | [Box] | ||
| - | FXList = RotateLoopFX</ | ||
| - | |||
| - | Podemos ver por encima que aplicamos el FX ('' | ||
| - | '' | ||
| - | Definimos entonces la ranura '' | ||
| - | Hemos definido básicamente una rotación que usa un cuadrado de forma sinusoidal que irá desde 0° a 360° en un periodo de 2 segundos. | ||
| - | |||
| - | Veamos ahora a nuestro FX de oleaje (wobble en Inglés). | ||
| - | |||
| - | <code ini> | ||
| - | SlotList = Wobble | ||
| - | |||
| - | [Wobble] | ||
| - | Type = scale | ||
| - | StartTime | ||
| - | EndTime | ||
| - | Period | ||
| - | Curve = sine | ||
| - | Amplification = 0.0 | ||
| - | StartValue | ||
| - | EndValue | ||
| - | |||
| - | Como puedes ver, estamos ahora modificando la propiedad escala. Dandole un valor inicial('' | ||
| - | Ambos están expresados en vectores. Pueden pueden haber sido expresados en flotantes if no quisieramos ningún valor [[http:// | ||
| - | ===== Recursos ===== | ||
| - | |||