0

I am currently trying to make a sprite blink by showing itself and hiding and I was using ppygame.time.delay to but it slows makes the entire game by stopping the entire game so my question is that is there a way to do this without slowing the entire game down

I will paste my code down below, also I know my delay script is really messy but I just wanted to show it in a more vissually clear way

my full code:

import pygame
import math
import random
from pygame import mixer
from pygame.constants import K_LEFT, K_RIGHT, K_UP, KEYDOWN
from pygame.locals import *
from pygame.sprite import LayeredUpdates

pygame.init()

screen = pygame.display.set_mode((640, 360))
running = True

# globals
global mouse_x
global mouse_y

# mouse
mouse_x = 0
mouse_y = 0

# player
playerImg = pygame.image.load("cursor.png")
playerImg = pygame.transform.scale(playerImg, (32, 32))

def player(x, y):
    screen.blit(playerImg, (x, y))
# warning sign
warningImg = pygame.image.load("warning.png")
warningImg = pygame.transform.scale(warningImg, (45, 45))
warningImg = pygame.transform.rotate(warningImg, 90)
warningY = random.randint(45, 315)
warningX = 580

def warning(x, y):
    warningY = random.randint(45, 315)
    warningX = 600
    screen.blit(warningImg, (x, y))
    pygame.time.delay(100)
    warningX = 900
    screen.blit(warningImg, (x, y))
    warningX = 600
    screen.blit(warningImg, (x, y))
    
    pygame.time.delay(50)
    warningX = 900
    screen.blit(warningImg, (x, y))
    warningX = 600
    screen.blit(warningImg, (x, y))
    
    pygame.time.delay(25)
    warningX = 900
    screen.blit(warningImg, (x, y))
    warningX = 600
    screen.blit(warningImg, (x, y))
    
    pygame.time.delay(12)
    warningX = 900
    screen.blit(warningImg, (x, y))
    warningX = 600
    screen.blit(warningImg, (x, y))
    
    pygame.time.delay(6)
    warningX = 900
    screen.blit(warningImg, (x, y))
    warningX = 600
    screen.blit(warningImg, (x, y))

# mouse pos
def mouse_pos_x():
    mouse_x, mouse_y = pygame.mouse.get_pos()


while running:
    
    screen.fill((0, 0, 0))
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

        if event.type == KEYDOWN:
            if event.key == pygame.K_ESCAPE:
                running = False
        
        mouse_x, mouse_y = pygame.mouse.get_pos()
        
        
        
    player(mouse_x - 16, mouse_y - 16)
    warning(warningX, warningY)
    
    pygame.display.update()

the code that delays

# warning sign
warningImg = pygame.image.load("warning.png")
warningImg = pygame.transform.scale(warningImg, (45, 45))
warningImg = pygame.transform.rotate(warningImg, 90)
warningY = random.randint(45, 315)
warningX = 580

def warning(x, y):
    warningY = random.randint(45, 315)
    warningX = 600
    screen.blit(warningImg, (x, y))
    pygame.time.delay(100)
    warningX = 900
    screen.blit(warningImg, (x, y))
    warningX = 600
    screen.blit(warningImg, (x, y))
    
    pygame.time.delay(50)
    warningX = 900
    screen.blit(warningImg, (x, y))
    warningX = 600
    screen.blit(warningImg, (x, y))
    
    pygame.time.delay(25)
    warningX = 900
    screen.blit(warningImg, (x, y))
    warningX = 600
    screen.blit(warningImg, (x, y))
    
    pygame.time.delay(12)
    warningX = 900
    screen.blit(warningImg, (x, y))
    warningX = 600
    screen.blit(warningImg, (x, y))
    
    pygame.time.delay(6)
    warningX = 900
    screen.blit(warningImg, (x, y))
    warningX = 600
    screen.blit(warningImg, (x, y))
Rabbid76
  • 177,135
  • 25
  • 101
  • 146
Pluto
  • 3
  • 2
  • 3
    You have to use either [`pygame.time.get_ticks()`](https://www.pygame.org/docs/ref/time.html) or a timer event ( [`pygame.time.set_timer()`](https://www.pygame.org/docs/ref/time.html#pygame.time.set_timer) ). – Rabbid76 Nov 15 '21 at 19:41
  • e.g.: [pygame tetris fever_mode adding timer](https://stackoverflow.com/questions/69590294/pygame-tetris-fever-mode-adding-timer/69590304#69590304) or [Spawning multiple instances of the same object concurrently in python](https://stackoverflow.com/questions/62112754/spawning-multiple-instances-of-the-same-object-concurrently-in-python/62112894#62112894) – Rabbid76 Nov 15 '21 at 19:42

0 Answers0