Reputation: 41
I want to display an image 3 seconds after the user has clicked the left mouse button. Here's a part of my code:
pic=pygame.image.load('pic.png')
while True:
for event.type==pygame.MOUSEBUTTONDOWN:
screen.blit(pic,(100,100))
It is only displayed a moment. I tried using for
and while
loops, however, it stutters some seconds and then shows a flash.
I think that I can maybe use a timer, add 3s, like so:
for event.type==pygame.MOUSEBUTTONDOWN:
#get now time here,and assignment for timeclick
if timeclick+3s>=timenow: # pseudocode
screen.blit(pic,(100,100))
How can I write this code paragraph? And are there better ways?
Upvotes: 2
Views: 2935
Reputation: 211057
You have to draw the image in the main application loop. Use pygame.time.get_ticks()
to return the number of milliseconds since pygame.init()
was called. When the MOUSEBUTTONDOWN
event occurs, then calculate the point in time after that the image has to be displayed. Display the image after the current time is greater than the calculated point of time:
import pygame
pygame.init()
screen= pygame.display.set_mode((800, 600))
#pic = pygame.image.load('pic.png')
pic = pygame.Surface((100, 100))
pic.fill((255, 255, 255))
pic_time = 0
run = True
while run:
current_time = pygame.time.get_ticks()
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.MOUSEBUTTONDOWN:
pic_time = current_time + 3000 # 3000 milliseconds == 3 seconds
screen.fill(0)
if pic_time > 0 and current_time >= image_time:
screen.blit(pic,(100,100))
pygame.display.flip()
pygame.quit()
Upvotes: 0
Reputation: 20458
Start the timer when the user clicks a mouse button, then calculate the passed time in the main loop and if it's >= 3
, blit the image.
import pygame as pg
def main():
screen = pg.display.set_mode((640, 480))
clock = pg.time.Clock()
font = pg.font.Font(None, 40)
img = pg.Surface((100, 100))
img.fill((190, 140, 50))
click_time = 0
passed_time = 0
done = False
while not done:
for event in pg.event.get():
if event.type == pg.QUIT:
done = True
# Start the timer.
elif event.type == pg.MOUSEBUTTONDOWN:
click_time = pg.time.get_ticks()
screen.fill((30, 30, 30))
if click_time != 0: # If timer has been started.
# Calculate the passed time since the click.
passed_time = (pg.time.get_ticks()-click_time) / 1000
# If 3 seconds have passed, blit the image.
if passed_time >= 3:
screen.blit(img, (50, 70))
txt = font.render(str(passed_time), True, (80, 150, 200))
screen.blit(txt, (50, 20))
pg.display.flip()
clock.tick(30)
if __name__ == '__main__':
pg.init()
main()
pg.quit()
Upvotes: 2