Why is nothing drawn in PyGame at all?
You need to update the display.
You are actually drawing on a Surface
object. If you draw on the Surface associated to the PyGame display, this is not immediately visible in the display. The changes become visibel, when the display is updated with either pygame.display.update()
or pygame.display.flip()
.
See pygame.display.flip()
:
This will update the contents of the entire display.
While pygame.display.flip()
will update the contents of the entire display, pygame.display.update()
allows updating only a portion of the screen to updated, instead of the entire area. pygame.display.update()
is an optimized version of pygame.display.flip()
for software displays, but doesn't work for hardware accelerated displays.
The typical PyGame application loop has to:
- handle the events by calling either
pygame.event.pump()
orpygame.event.get()
. - update the game states and positions of objects dependent on the input events and time (respectively frames)
- clear the entire display or draw the background
- draw the entire scene (draw all the objects)
- update the display by calling either
pygame.display.update()
orpygame.display.flip()
- limit frames per second to limit CPU usage with
pygame.time.Clock.tick
import pygame
from pygame.locals import *
pygame.init()
DISPLAY = pygame.display.set_mode((800,800))
pygame.display.set_caption("thing")
clock = pygame.time.Clock()
run = True
while run:
# handle events
for event in pygame.event.get():
if event.type == QUIT:
run = False
# clear display
DISPLAY.fill(0)
# draw scene
pygame.draw.rect(DISPLAY, (200,200,200), pygame.Rect(0,400,800,400))
# update display
pygame.display.flip()
# limit frames per second
clock.tick(60)
pygame.quit()
exit()
repl.it/@Rabbid76/PyGame-MinimalApplicationLoop See also Event and application loop