Pygame clock.tick()

Salman Mehmood 15 febrero 2024
  1. Pygame Usa clock.tick() y FPS en Game Loop
  2. Flujo de trabajo del método clock.tick()
Pygame clock.tick()

Aprenderemos en este artículo sobre el método clock.tick() y cómo funciona en el módulo pygame. También vamos a aprender cuál es la diferencia entre ticks y fps.

Pygame Usa clock.tick() y FPS en Game Loop

reloj.tick() vs FPS

Vamos a ver la función llamada reloj.tick(). Cuando esta función llama, esto devuelve la cantidad de tics que hace su procesador.

Si ponemos 150 en tick(), esto completará 150 ticks en 0,15 segundos que será el tiempo de ejecución de nuestro procesador.

Si movemos un píxel cada vez que se ejecuta el bucle, sería más rápido en computadoras con un procesador más rápido y más lento en computadoras con un procesador más lento. Es importante saber esto porque cada vez que usa un tic de reloj, calcula un tic igual a un milisegundo.

FPS significa velocidad de fotogramas por segundo, y FPS varía según la potencia de la GPU. Por ejemplo, si está jugando un juego con 30 fps, muestra 30 fotogramas por segundo, pero el ojo humano no puede ver los cambios.

Si el juego falla durante la transmisión, es porque la velocidad de procesamiento de su GPU es más lenta.

Flujo de trabajo del método clock.tick()

Antes de entrar en el código real, hablemos de la lógica de los temporizadores porque no hay una función incorporada en Pygame que espere unos segundos y luego ejecute algún código, pero tuvimos que crear nuestro temporizador porque no existe tal función.

Una vez que iniciamos pygame, un temporizador comienza a correr y cuenta en milisegundos, y podemos medir cuánto tiempo ha pasado. Necesitamos medir un solo punto tan a menudo como podamos y convertirlo en un cronómetro.

Una vez que llamamos a un punto estático, tenemos que medir continuamente un punto, y nuestro punto de interrupción será la hora actual o la última. La diferencia entre nuestra hora actual y nuestro punto estático es la duración de nuestro temporizador.

Si queremos un temporizador de dos segundos, necesitamos una línea como tiempo actual - tiempo estático>2000 y ejecutar el código que queramos. Debido a que solo medimos el tiempo en cada cuadro, no lo medimos cada milisegundo; si tenemos 60 cuadros por segundo, solo medimos el tiempo cada 16 milisegundos.

Implementemos toda la lógica en el script de Python.

import pygame
import sys

pygame.init()
Myscreen = pygame.display.set_mode((800, 800))
clock = pygame.time.Clock()

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

    pygame.display.flip()
    clock.tick(60)

Comenzamos con la importación del módulo pygame, luego iniciamos pygame y luego creamos el objeto de superficie de visualización principal que muestra una ventana con 800 por 800 píxeles. En la siguiente línea, creamos un reloj usando pygame.time.Clock() para medir con precisión a qué hora.

Luego llegamos a nuestro bucle de juego y verificamos la entrada si los jugadores presionan el botón de escape. Este pygame.display.flip() dibuja el marco y clock.tick(60) mide el tiempo con precisión, de modo que tenemos 60 fotogramas por segundo.

Para implementar un temporizador, creamos una variable llamada MyCurrent_Time, que será 0, y esta variable almacenará el tiempo en cada cuadro. Esta variable se usará en este ciclo while llama a pygame.time.get_ticks() y nos da el milisegundo.

Ahora crearemos otra variable llamada button_pressTime y la inicializaremos con 0, y comprobaremos si se ha pulsado un botón. Así que tomamos esta variable y le asignamos la misma función pygame.time.get_ticks().

Después de presionar la tecla hacia abajo, queremos llenar nuestra pantalla con color blanco. Usaremos el método fill() y le pasaremos los valores RGB en una tupla, y después de dos segundos, la pantalla de nuestra ventana se llenará de color negro.

Fragmento de código completo:

import pygame
import sys

pygame.init()
Myscreen = pygame.display.set_mode((800, 800))

clock = pygame.time.Clock()
MyCurrent_Time = 0
button_pressTime = 0

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.KEYDOWN:
            button_pressTime = pygame.time.get_ticks()
            Myscreen.fill((255, 255, 255))

    MyCurrent_Time = pygame.time.get_ticks()
    if MyCurrent_Time - button_pressTime > 2000:

        Myscreen.fill((0, 0, 0))
    print(f"current time {MyCurrent_Time} button pressed time {button_pressTime}")
    pygame.display.flip()
    clock.tick(60)

En la salida, podemos ver que nuestro tiempo actual aumenta en cada tic y el tiempo estático permanece en 0 hasta que no presionamos la tecla de abajo.

Producción:

marca de reloj pygame

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

Artículo relacionado - Pygame Method