Функция pygame.display.update
(или, альтернативно, pygame.display.flip
) должна вызываться только один раз за кадр (итерация цикла while) в конце раздела рисования кода.
Просто удалите первый вызов pygame.display.update()
, и программа будет работать правильно.
Несколько замечаний по поводу кода: определите свои константы (цвета) и создайте экран внеЦикл while (это не связано с мерцанием, но нет смысла делать это в цикле while).Кроме того, лучше не использовать звездный импорт (только from pygame.locals import *
хорошо, если это единственный звездный импорт).И используйте часы, чтобы ограничить частоту кадров.
import sys
import pygame
from pygame.locals import *
pygame.init()
# Use uppercase for constants and lowercase for variables (see PEP 8).
SCREENWIDTH = 900
SCREENHEIGHT = 600
SCREENSIZE = [SCREENWIDTH, SCREENHEIGHT]
screen = pygame.display.set_mode(SCREENSIZE)
clock = pygame.time.Clock() # A clock object to limit the frame rate.
BG_COL = [255, 123, 67]
S1_COL = (0, 255, 188)
while True:
for events in pygame.event.get():
if events.type == QUIT:
pygame.quit()
sys.exit()
screen.fill(BG_COL)
pygame.draw.rect(screen, S1_COL, (50, 25, 550, 565), 1)
pygame.display.update()
clock.tick(60) # Limits the frame rate to 60 FPS.