Is there a way to change what text is displayed after 1 second in Pygame?

I'm developing a game, but need some help with changing what text is displayed on the screen in Pygame. For any of you wondering, I'm using Python 3. I must be overlooking some obvious flaw, but I can't seem to put my finger on it. Anyways, my code looks like this:

import pygame, sys, time
from pygame.locals import *

pygame.init()

text1 = "text 1"
text2 = "text 2"
displaytext = ""

#screen
screen = pygame.display.set_mode((600, 500))
pygame.display.set_caption("text test")

font = pygame.font.SysFont("None", 24)
text = font.render(str(displaytext), True, (255,255,255))
textRect = text.get_rect()
textRect.center = (300, 250)

while True:
    screen.fill((0,0,0))
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        if event.type == KEYDOWN:
            if event.key == K_SPACE:
                displaytext = text1
                time.sleep(1.5)
                displaytext = text2
                
    text = font.render(str(displaytext), True, (255,255,255))
    
    screen.blit(text, (textRect))
    pygame.display.update()

Upvotes: 1

Views: 480

Answers (1)

Rabbid76
Rabbid76

Reputation: 210996

Use a timer event. See pygame.time.set_timer().

Define a user event (see pygame.event):

my_event = pygame.USEREVENT + 1

Start the timer when SPACE is pressed:

if event.type == KEYDOWN:
    if event.key == K_SPACE:
        displaytext = text1
        text = font.render(str(displaytext), True, (255,255,255))
        pygame.time.set_timer(my_event, 1000)

When the timer event is received, change the text and stop the timer:

if event.type == my_event:
    displaytext = text2
    text = font.render(str(displaytext), True, (255,255,255))
    pygame.time.set_timer(my_event, 0)

Complete example:

import pygame, sys, time
from pygame.locals import *

pygame.init()

text1 = "text 1"
text2 = "text 2"
displaytext = ""

#screen
screen = pygame.display.set_mode((600, 500))
pygame.display.set_caption("text test")

font = pygame.font.SysFont("None", 24)
text = font.render(str(displaytext), True, (255,255,255))
textRect = text.get_rect()
textRect.center = (300, 250)

my_event = pygame.USEREVENT + 1

while True:
    screen.fill((0,0,0))
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        if event.type == KEYDOWN:
            if event.key == K_SPACE:
                displaytext = text1
                text = font.render(str(displaytext), True, (255,255,255))
                pygame.time.set_timer(my_event, 1000)
        if event.type == my_event:
            displaytext = text2
            text = font.render(str(displaytext), True, (255,255,255))
            pygame.time.set_timer(my_event, 0)
           
    screen.blit(text, (textRect))
    pygame.display.update()

Upvotes: 1

Related Questions