This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
es:orx:tutorials:clock [2009/08/23 17:02 (16 years ago)] – Added latest changes from Orgos that have been lost in the site transfer iarwain | es:orx:tutorials:clock [2020/08/19 21:11 (5 years ago)] (current) – Old content sausage | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Tutorial de Reloj ====== | ||
- | ===== Resumen ===== | ||
- | |||
- | Vea el [[Object|Tutorial de Objeto]] para más información sobre la creación básica de un objeto. | ||
- | |||
- | Aquí vamos a registrar el proceso de llamada de retorno en dos relojes diferentes solo con propósitos didácticos. | ||
- | Todos los objetos son actualizados desde el mismo reloj. ((El contexto del reloj es además usado aquí solo para demostración)) | ||
- | |||
- | El primer reloj corre a 0.01s por tictac (100 Hz) y el segundo corre a 0.2s por tictac (5 Hz). | ||
- | |||
- | Sí presionas las teclas ARRIBA, ABAJO y DERECHA, podrás alterar el tiempo del primer reloj. | ||
- | Este será actualizado al mismo tiempo, pero el tiempo para la llamada de retorno del reloj será modificado. | ||
- | |||
- | Esto permite de forma fácil adicionar distorsión al tiempo y tener varias partes de la lógica actualizándose en diferentes frecuencias. | ||
- | Un reloj puede tener tantas llamadas de retornos registradas como quieras, con un parámetro de contexto opcional. | ||
- | |||
- | Por ejemplo, el contador FPS mostrado en la esquina arriba izquierda es calculado con un reloj no-alterado que corre a 1Hz. | ||
- | |||
- | |||
- | |||
- | ===== Detalles ===== | ||
- | |||
- | Cuando usamos orx, no necesitamos escribir un <code c> | ||
- | Lo que hacemos es crear un reloj ((o usamos uno existente, como el del núcleo o el reloj de la física)), especificando su frecuencia de actualización. | ||
- | |||
- | Podemos crear cuantos relojes querramos, debemos asegurarnos que la parte más importante de nuestra lógica (jugadores, enemigos ...) serán actulizados frecuentemente, | ||
- | Por ejemplo, la física y la representación de gráficos usan dos relojes diferentes que tiene frecuencias distintas. | ||
- | |||
- | Existe otra gran ventaja en usar varios relojes pues podemos facilmente obtener distorción del tiempo. | ||
- | |||
- | En este tutorial, crearemos dos relojes, uno que corre a 100Hz (período = 0.01s) y otro a 5Hz (período = 0.2s). | ||
- | |||
- | <code c> | ||
- | |||
- | pstClock1 = orxClock_Create(orx2F(0.01f), | ||
- | |||
- | pstClock2 = orxClock_Create(orx2F(0.2f), | ||
- | |||
- | Note que pasamos el tipo '' | ||
- | Cualquier valor por encima de este es válido. Los más bajos son reservados para uso interno del motor. | ||
- | |||
- | Ahora usaremos el mismo actualizador de llamada de retorno para los dos relojes. Sin embargo, vamos a definir diferentes contextos, por lo tanto el primer reloj modificará al primer objeto y el segundo reloj al otro objeto: | ||
- | |||
- | <code c> | ||
- | |||
- | orxClock_Register(pstClock2, | ||
- | |||
- | Esto significa que nuestra llamada de retorno será ejecutada 100 veces por segundo con pstObject1 y el segundo será ejecutado 5 veces por segundo con el objeto pstObject2. | ||
- | |||
- | Como nuestro actualizador de llamada de retorno solamente rota el objeto que se obtiende del parametro " | ||
- | Sin embarbo, la rotación del segundo objeto se hace en mayor tiempo (5 Hz) que el primero (100 Hz) por lo que obtenemos diferentes velocidades de rotación. | ||
- | |||
- | Ahora veamos el código de la llamada de retorno. | ||
- | |||
- | Lo primero: necesitamos obtener nuestro objeto desde parametro " | ||
- | Como orx usa [[wp> | ||
- | |||
- | <code c> | ||
- | |||
- | Sí retorna '' | ||
- | |||
- | Nuestro próximo paso será aplicar rotación al objeto. | ||
- | |||
- | <code c> | ||
- | |||
- | Veamos que aquí usaremos el valor tomado de nuestro reloj.\\ | ||
- | Esto es porque toda nuestra lógica esta relacionada con relojes. | ||
- | |||
- | Por supuesto, existe una mejor forma de dar rotación a un objeto ((asignandole una velocidad angular por ejemplo o usando un '' | ||
- | Pero volvamos a lo que nos interesa: reloj y distorción del tiempo! | ||
- | |||
- | En nuestro actualizador de llamada de retorno, además encuestaremos las entradas activas. Las entradas son cadenas de caracteres que están atadas, en cada fichero de configuración o por código, a teclas precionadas, | ||
- | |||
- | ------------------------------------- | ||
- | |||
- | In our case, if the up or down arrow keys are pressed, we'll strecthed the time for the first clock that has been created.\\ | ||
- | If left or right arrow keys are pressed, we'll remove the stretching and go back to the original frequency. | ||
- | |||
- | As we didn't store our first created clock ((on purpose, so as to show how to retrieve it)), we need to get it back! | ||
- | |||
- | <code c> | ||
- | |||
- | Specifying '' | ||
- | It'll return the first clock created with the '' | ||
- | |||
- | Now, if the ''" | ||
- | |||
- | <code c> | ||
- | { | ||
- | /* Makes this clock go four time faster */ | ||
- | orxClock_SetModifier(pstClock, | ||
- | }</ | ||
- | |||
- | In the same way we make it 4X slower than originally by changing its modifier when ''" | ||
- | |||
- | <code c>else if(orxInput_IsActive(" | ||
- | { | ||
- | /* Makes this clock go four time slower */ | ||
- | orxClock_SetModifier(pstClock, | ||
- | }</ | ||
- | |||
- | Lastly, we want to set it back to normal, when the ''" | ||
- | |||
- | <code c>else if(orxInput_IsActive(" | ||
- | { | ||
- | /* Removes modifier from this clock */ | ||
- | orxClock_SetModifier(pstClock, | ||
- | }</ | ||
- | |||
- | And here we are! :-)\\ | ||
- | As you can see, time stretching is achieved with a single line of code. As our logic code to rotate our object will use the clock' | ||
- | |||
- | This can be used in the exact same way to slow down monsters while the player will still move as the same pace, for example. | ||
- | There are other clock modifiers type but they' | ||
- | |||
- | |||
- | ===== Resources ===== | ||
- | |||
- | Source code: [[https:// | ||
- | |||
- | Config file: [[https:// |