Reputation: 17
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
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