Inteyerry
Inteyerry

Reputation: 41

How to display an image after a time interval?

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

Answers (2)

Rabbid76
Rabbid76

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

skrx
skrx

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

Related Questions