Чтобы сделать то, что вы пытаетесь сделать, вам нужно что-то изменить в цикле «while True:». Вот пример кода, который будет делать то, что вы пытаетесь сделать:
import pygame, sys, pygame.locals#1
pygame.init()#2
window=pygame.display.set_mode((500, 400), 0, 32)#3
pygame.display.set_caption("Paint")#4
BLACK = (0, 0, 0)#5
WHITE = (255, 255, 255)#6
RED = (255, 0, 0)#7
GREEN = (0, 255, 0)#8
BLUE = (0, 0, 255)#9
pentagon=pygame.Surface((250, 265))#10
pentagon.fill((0, 0, 0))#11
pygame.draw.polygon(pentagon, BLUE, ((146, 0), (250, 100), (230, 265), (44, 250), (0,110)))#12
pentagon.set_colorkey((0, 0, 0))#13
triangle=pygame.Surface((150, 200))#14
triangle.fill((0, 0, 0))#15
pygame.draw.polygon(triangle, RED, ((70, 0), (150, 200), (0, 50)))#16
triangle.set_colorkey((0, 0, 0))#17
line=pygame.Surface((60, 8))#18
line.fill(BLACK)#19
circle=pygame.Surface((30, 30))#20
circle.fill((0, 0, 0))#21
pygame.draw.circle(circle, GREEN , (15, 15), 15, 0)#22
circle.set_colorkey((0, 0, 0))#23
rects={'pentagon': pentagon.get_rect(), 'triangle': triangle.get_rect(), 'line': line.get_rect(), 'circle': circle.get_rect()}#24
rects['line'].centery=60#25
rects['line'].left=60#26
rects['circle'].centerx=150#27
rects['circle'].centery=150#28
while True:#29
for event in pygame.event.get():#30
if event.type==pygame.locals.QUIT:#31
pygame.quit()#32
sys.exit()#33
for rect in rects:#34
rects[rect].right+=1#35
if rects[rect].right>500:#36
if rect=='line':#37
rects['line'].centery=60#38
rects['line'].left=60#39
elif rect=='circle':#40
rects['circle'].centerx=150#41
rects['circle'].centery=150#42
else:#43
rects[rect].topleft=(0, 0)#44
window.fill(WHITE)#45
window.blit(pentagon, rects['pentagon'])#46
window.blit(triangle, rects['triangle'])#47
window.blit(line, rects['line'])#48
window.blit(circle, rects['circle'])#49
pygame.time.Clock().tick(40)#50
pygame.display.update()#51
Я сделаю все возможное, чтобы объяснить этот код как можно лучше.
Строки 1-9, вы уже знаете.
Строка 10 начинается с того, о чем вы, вероятно, не знаете. Поверхностные объекты - это тип прямоугольного изображения, которое можно прикрепить к любой другой поверхности или нарисовать с помощью pygame.draw. Верьте этому или нет, окно - фактически поверхность.
Линия 10 создает поверхность, линия 11 заполняет ее черным, а линия 12 рисует на ней пятиугольник.
В строке 13 все пиксели черного цвета прозрачны.
Строки 14-17, теперь вы должны понимать.
Линия 18 создает новый объект поверхности для линии, но вместо того, чтобы рисовать линию на ней, она заполняется черным и остается одна. Это потому, что если вы посмотрите на строку в вашей старой программе, то увидите, что на самом деле это просто прямоугольник и ничего больше.
Строки 20-23, вы должны понимать.
Строка 24 составляет словарь прямоугольников. Прямоугольники показывают местоположение поверхностного объекта и необходимы для того, чтобы нарисовать их на чем-либо.
Линии 25-28 меняют местоположение линии и круга. Я сделал это потому, что подумал, что вам это может понравиться, учитывая, что в вашей программе нет линии и круга в левом верхнем углу.
Строки 29-33, вы должны понимать.
Строка 34 запускает цикл for, который проходит через все каналы.
Строка 35 перемещается вправо каждого из каналов на один пиксель вправо.
Строка 36 проверяет, попала ли правая часть прямоугольника в правый край окна.
Строка 37 проверяет, является ли линия, попавшая в сторону, линией, и, если это так, строки 38-39 перемещают ее в то место, где она была у вас.
Строка 40 проверяет, является ли тот, который ударяет в сторону, кругом, и, если это так, строки 41-42 перемещают его в то место, где он был у вас.
Линии 43-44 помещают прямоугольник в верхний левый угол, где начинались две другие фигуры.
Строка 45, которую вы должны знать.
Строки 46-49 используют функцию surface.blit (). Первый аргумент этой функции - поверхность, а второй - прямоугольник.
Строка 50 не позволяет передавать более 40 кадров в секунду.
Строка 51 обновляет экран.
Я действительно надеюсь, что это помогло, и я был бы признателен, если бы вы проголосовали или приняли мой ответ, учитывая, сколько времени мне понадобилось, чтобы написать его. Если у вас есть какие либо вопросы, пожалуйста спрашивайте. Спасибо!