So i am trying to display an image, wait 1 second and then display another image. I'm making a matching game, so in my code I'm trying to say that if two images don't match, I want to change the image to just a preset generic one. So my code for that would look something like this:
if True:
self.content = self.image
time.sleep(1)
self.content = Tile.cover
self.content
is a variable for what is being displayed, self.image
is the image that displays, and then Tile.cover
is the generic image that covers the other one. Yet whenever I do this the code skips the first line, and just sets the image to Tile.cover
, why?
Updated on 18/03/2019.
In Pygame, you have to use pygame.time.wait()
instead of python's time.sleep()
.
It takes time in milliseconds:
pygame.time.wait(1000)
The reason for not using time.sleep
is because it will block pygame's event loop and so pygame will not be able to process other events.
Following is the older version of this answer which was marked accepted. It is outdated and, most probably, incorrect.
The behaviour which you're getting is due to the way time.sleep()
I want you to try the following code in your console:
>>> import time
>>>
>>> def foo():
print "before sleep"
time.sleep(1)
print "after sleep"
>>>
>>> # Now call foo()
>>> foo()
Did you observe what happened during the output?
>>> # Output on calling foo()
... # Pause for 1 second
... 'before sleep'
... 'after sleep'
This is what is happening with your code too. First it sleeps, then it updates self.content
to self.image
and Time.cover
at the same time.
To fix the code in the example above, you can use sys.stdout.flush()
.
>>> def foo():
print "before sleep"
sys.stdout.flush()
time.sleep(1)
sys.stdout.flush()
print "after sleep"
>>> foo()
... 'before sleep'
... # pause for 1 second
... 'after sleep'
I haven't tried sys.stdout.flush()
with Pygame so I can't say if it will work for you, but you can try.
There seems to be a working solution on this SO question: How to wait some time in pygame?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With