Control del temps en videojocs¶
Els motors de videojocs poden comptar el temps de forma real (utilitzant el rellotge intern de l’ordinador) o bé comptant el nombre de frames que s’han dibuixat. En el cas de pygame, el mòdul pygame.time conté operacions per a monitoritzar el temps.
Càlcul del temps que ha transcorregut¶
Tots els llenguatges de programació disposen de funcions per a consultar l’hora actual (l’instant de temps). Per calcular un interval de temps, cal consultar l’instant actual i més tard tornar-lo a consultar-lo i fer la resta.
La funció pygame.time.get_ticks() serveix per a consultar el nombre de mil·lisegons que han passat des que s’ha inicialitzat pygame.
Una forma alternativa és utilitzar la funció datetime.datetime.now(), que retorna l’hora actual (una instància de la classe datetime.datetime).
Caution
Si el joc que desenvolupem té diverses etapes i només volem consultar el temps en què el jugador ha estat jugant de forma efectiva, no hem de comptar el temps que s’ha estat en qualsevol altra etapa. Per exemple, si el joc es pot posar en mode pausa, caldrà no tenir en compte l’estona transcorreguda en aquest mode en el càlcul de temps efectiu del joc.
Planificador de successos temporals¶
Sovint volem que en el nostre joc en un moment donat o cada cert temps ocorrin successos: fer aparèixer obstacles, enemics, power-ups, etc. Per a aquests casos, resulta convenient utilitzar un planificador de successos temporals, de vegades anomenat scheduler o spawner. Cal concebre un planificador temporals com un element més del joc, com és ara un sprite que s’actualitza a cada frame però amb la diferència que no es visualitza. La seva actualització consisteix en mesurar el temps i, en funció de l’estona que ha passat (i de l’estat actual del joc o d’altres condicions), fa aparèixer, desaparèixer o canviar altres elements del joc. Per exemple, un planificador podria fer aparèixer un sprite de tipus obstacle cada 5 segons; o en intervals de temps aleatoris…
Els successos temporals totalment aleatoris poden provocar que la continuació del joc sigui impossible, per part del jugador. Per exemple, podria passar que el planificador aleatori, per mala sort, fes aparèixer tants obstacles simultanis que el jugador fos incapaç d’esquivar-los. Per a resoldre això es poden posar restriccions sobre la cadència i el nombre de successos temporals. Una alternativa és utilitzar patrons de successos temporals precalculats. Ara bé, com que els usuaris tendeixen a aprendre’s de memòria els patrons precalculats, una solució, força utilitzada en videojocs, és tenir un conjunt de (petits) sub-patrons de successos i que elplanificador els alterni de forma aleatòria.