Executando verificação de segurança...
2

Cara tava com uma dificuldade de achar um método agil de colocar um delay no meu jogo em algumas ações e não conseguia pensar em nada,ai lembrei dos decorators quando vi seu post, então dai eu criei decorator que mudou tudo.

Também fiz uma descoberta. Descobri que poosso utilizar uma classe como decorador, que é bem importante para algumas ações, e achei interessante o modo como funciona para utilizar instâncias da classe dentro de um decorador, pois quando utilizamos diretamente na função ele não aceita usarmos a instancia de classe "self", sendo assim a synxtax ficária como a demonstrada abaixo.

import pygame.time


class Timer:
    def __init__(self, delay: int):
        self.last_update = pygame.time.get_ticks()
        self.delay = delay

    def __call__(self, func):
        def wrapper(*args, **kwargs):
            elapsed = pygame.time.get_ticks()
            if elapsed - self.last_update > self.delay:
                self.last_update = elapsed
                return func(*args, **kwargs)

        return wrapper


class Player(Entity):
    def __init__(self, context, image):
        super().__init__(context, image)
        ....
        
        ##########
        # TIMERS #
        ##########

        self.move = Timer(delay=self.speed())(self.move)
        self.frame_motion = Timer(delay=10 if self.speed() >= 500 else 150 * (1 + (self.speed() / 500)))(
            self.frame_motion)
        ....
Carregando publicação patrocinada...