La función Get Timer ofrece el tiempo transcurrido (en milésimas de
segundo) desde el momento de la apertura de la película Flash:
Programando el valor de una variable con el valor de Get Timer el
resultado sería éste:
(obviamente, al clic en "start" el tiempo no comienza de 0 porque,
como queda dicho, Get Timer ofrece el valor en milésimas de segundo
desde el momento de la apertura de la película Flash, prácticamente desde la apertura de la página web)
Para acceder al tiempo en segundos, y no en milésimas, es necesario
introducir una pequeña expresión que permite transformar las milésimas en
segundos:
| Set Variable: "display" = Int(GetTimer / 1000) |
donde display es el nombre del campo.
Esta expresión transforma en entero (para evitar que los segundos esten en
decimales... ) el valor de Get Timer dividido por 1000 (milésimas en segundos).
He aquí el resultado:
Veamos entonces cómo construir un cronómetro similar al primer ejemplo que hemos mostrado.
Necesitamos 3 frame de un único nivel.
El primer frame se asigna a la declaración de algunas variables; el
segundo para actualizar el campo de texto y el tercero para volver al precedente
de manera que se repita continuamente la animación.
En un cronómetro los segundos llegan hasta 60 y después vuelven a empezar de 0, ¿no es verdad?
Por desgracia, será necesario resolver este problema, ya que Flash cuenta los
segundos en progresión, sin pararse (¿habéis notado que, pasados los 60, sigue
aumentando el valor?).
Empecemos asignando el valor a display (nuestro campo de texto)
igual a:
| Set Variable: "display" = min & ":" & sec |
min identifica los minutos transcurridos; sec, los segundos, y sendos valores
se unen entre ellos utilizando también el carácter : (¿qué
cronómetro sería si no?).
Ahora nuestra tarea será asignarle los valores a min y seg.
Puesto que seg tiene que volver a empezar de 0 una una vez que ha llegado a 60, no podemos
asignarle directamente el valor de Int(GetTimer / 1000), por tanto tendremos que
emplear otra variable x_seg para el resultado de esta
expresión. De modo que tenemos x_seg que ofrece el valor del tiempo transcurrido
en segundos.
¿Cada cuánto tiene que saltar de 1, min? Es obvio que despues de cada 60 segundos.
Podemos utilizar otra variable, x_min, con valor inicial de 60
, que permite efectuar el control en x_seg:
If (x_seg = x_min)
Set Variable: "seg" = 0
Set Variable: "min" = min + 1
Set Variable: "x_min" = x_min + 60
End If |
Se x_seg es igual a 60 (supongamos que haya alcanzado los primeros 60
segundos), entonces setta la variable seg igual a 0 (inmediatamente se pone
a cero...), aumenta en 1 la variable min (otro minuto más) y
aumenta también x_min en 60 (porque el siguiente control se tendrá que
hacer entre 60+60 segundos, es decir 120... ¿entendido?). Esta condición se repetirá
cada minuto del tiempo transcurrido.
Falta sólo settar la variable seg para cada segundo (hasta ahora
se ha settado para cada minuto). He aquí la action:
| Set Variable: "seg" = (x_seg - x_min) + 60 |
Esta action es muy personal...
En concreto, seg tiene que asumir un valor de 0 a 60 para cada minuto que
transcurre. Resulta imposible si se asigna directamente el valor de Get Timer
por la razón ya expuesta, y por eso he creado esta simple expresión...
Imaginemos que x_seg haya llegado a 124 segundos (o sea 2 minutos y 4
segundos), el resultado de esta expresión sería: (124 - 180) + 60 =
4 .
x_min tiene valor 180, porque, teniendo como valor inicial 60, y
aumentando cada minuto de 60, llegados a 124 segundos (2 minutos) resulta igual a
180.
El +60 se ha incluido porque el valor de x_min es
siempre mayor respecto a x_seg en 60. Se podría obviar añadiendo
otra variable parecida a x_min, pero con valor inicial igual a 0 y no
60.
En definitiva, para evitar que los segundos por debajo del valor 10 aparezcan
sin el 0 delante de la única cifra (1 en lugar de 01) metemos
esta última action:
If (sec < 10)
Set Variable: "seg" = "0" & seg
End If |
Y he aquí la action en su totalidad:
Set Variable: "x_seg" = Int(GetTimer/1000)
Set Variable: "seg" = (x_seg - x_min) + 60
If (x_seg = x_min)
Set Variable: "seg" = 0
Set Variable: "min" = min + 1
Set Variable: "x_min" = x_min + 60
End If
If (sec < 10)
Set Variable: "seg" = "0" & seg
End If
Set Variable: "display" = min & ":" & seg |
Falta sólo la programación inicial de las variables x_min y min
respectivamente a 60 y a 0, que habrá que incluir en el primer frame de la animación; así, el
juego está hecho.