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/27 14:08 (16 years ago)] – orgos | 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, | ||
- | |||
- | |||
- | En nuestro caso, si las teclas " | ||
- | Si " | ||
- | |||
- | Como no guardamos el primer reloj creado ((solo para mostrar como recuperarlo)), | ||
- | |||
- | <code c> | ||
- | |||
- | Esto retornará el primer reloj creado con el tipo '' | ||
- | |||
- | Ahora, si precionamos las teclas explicadas, cambiaremos la velocidad del releoj en un factor de 4x. | ||
- | |||
- | <code c> | ||
- | { | ||
- | /* Hace al reloj ir 4 veces más rápido */ | ||
- | orxClock_SetModifier(pstClock, | ||
- | }</ | ||
- | |||
- | De la misma manera hacemos esto para definir un factor de 4x pero más lento. | ||
- | |||
- | <code c>else if(orxInput_IsActive(" | ||
- | { | ||
- | /* Hace al reloj ir 4 veces más lento */ | ||
- | orxClock_SetModifier(pstClock, | ||
- | }</ | ||
- | |||
- | Por último, queremos poner el tiempo normal cuando precionemos la tecla asignada. | ||
- | |||
- | <code c>else if(orxInput_IsActive(" | ||
- | { | ||
- | /* Remueve los modificadores del reloj */ | ||
- | orxClock_SetModifier(pstClock, | ||
- | }</ | ||
- | |||
- | And here we are! :-)\\ | ||
- | Como puedes ver, la distorcion del tiempo puede hacerce con solo una línea de código. Como nuestra parte lógica se encarga de rotar el objeto modificado por el tiempo, vemos la rotacion del primer objeto cambiar basandoce en el valor modificado del reloj. | ||
- | |||
- | Por ejemplo esto puede usarce de la misma manera para enlentecer a los mounstruos mientras el jugador se mueve a la misma velocidad. | ||
- | Existen otros tipos de modificadores de reloj pero los veremos mas adelante. | ||
- | |||
- | ===== Resources ===== | ||
- | |||
- | Source code: [[https:// | ||
- | |||
- | Config file: [[https:// |