5.6. Temporizadores
Aunando los distintos conocimientos que hasta ahora hemos adquirido podemos desarrollar programas que cambien a lo largo del tiempo. Mediante el uso de variables y condicionales seremos capaces de crear sketches que detecten que ha pasado una cantidad determinada de tiempo y ejecutar ciertas acciones cuando esto ocurra. Podríamos por ejemplo quitar el noLoop() que utilizamos en el último ejemplo y hacer que obtengamos un valor aleatorio para el relleno del círculo cada 2 segundos manteniendo el sketch corriendo a 60 frames por segundo.
Para ello, podemos hacer uso del método millis() o también podemos usar la variable propia del sistema frameCount. Ambas maneras permiten llevar la cuenta del tiempo transcurrido en nuestro sketch pero lo hacen de distinta manera. La variable del sistema (como width o height) frameCount almacena el número de frame actual en el que nos encontramos. Recordemos que por defecto en P5 la velocidad de refresco es de 60 fotogramas por segundo (algo que podemos cambiar si usamos el método frameRate()), por lo que frameCount aumentará 60 unidades cada segundo que transcurra.
El número de frames por segundo (FPS) que podemos alcanzar depende de la capacidad de nuestro ordenador para procesar todas las instrucciones que tenemos en nuestro sketch. Si le pedimos que haga demasiadas cosas, no le da tiempo a hacerlo todo en 1/60 de segundo y el frame rate baja. 60 frames por segundo es un estándar en el mundo audiovisual (los televisores de 60 Hz por ejemplo, que muestran 60 imágenes por segundo), pero dependiendo del caso podría ser aceptable trabajar a 30 FPS o incluso a 15 FPS (muchas películas de animación usan 12 FPS). En nuestro caso, intentaremos mantener los 60 FPS siempre que podamos.
El método millis() es similar a utilizar frameCount, pero lo que nos devuelve millis() son los milisegundos (milésimas de segundo) que han transcurrido desde que iniciamos el sketch.
Fuente: elaboración propia.
Veamos un par de ejemplos sencillos en los que cambiaremos el color de fondo aleatoriamente cada segundo utilizando temporizadores tanto con frameCount como con millis():
Fuente: elaboración propia.
Pasemos a ver cómo podemos hacer lo mismo pero utilizando millis() en lugar de frameCount:
Fuente: elaboración propia.