передача аргумента методу pygame.display.update()
Я недавно начал изучать модуль pygame на этом замечательном сайте: https://younglinux.info/pygame/rect.
Там была тема про то,что можно обновлять не всё окно,а только некоторые его области,для этого нужно методу pygame.display.update передать в качестве аргумента объект класса pygame.Rect.
Я написал маленький код,чтобы проверить,как это будет работать:
import pygame
from sys import exit
from random_color import randcolor
sc=pygame.display.set_mode((900,900))
general_rect=sc.get_rect()
surf_left=pygame.Surface((450,900))
surf_right=pygame.Surface((450,900))
rect_left=surf_left.get_rect()
rect_right=surf_right.get_rect(topleft=(450,0))
current_rect=general_rect
index=0
modes=general_rect,rect_left,rect_right
print(type(rect_right))
def change_upd():
global current_rect,index
index=(index+1)%3
current_rect=modes[index]
while True:
for i in pygame.event.get():
if i.type==pygame.QUIT:
exit()
elif i.type==pygame.KEYDOWN:
if i.key==pygame.K_SPACE:
change_upd()
break
surf_left.fill(randcolor())
surf_right.fill(randcolor())
sc.blit(surf_left,rect_left)
sc.blit(surf_right,rect_right)
pygame.display.update(current_rect)
pygame.time.delay(100)
В итоге,при нажатии клавиши пробела свой цвет продолжают менять обе области,как и до нажатия клавиши.
Далее я переписал тело цикла,и всё заработало:
while True:
for i in pygame.event.get():
if i.type==pygame.QUIT:
exit()
elif i.type==pygame.KEYDOWN:
if i.key==pygame.K_SPACE:
index=(index+1)%3
if not index:
surf_left.fill(randcolor())
surf_right.fill(randcolor())
sc.blit(surf_left,rect_left)
sc.blit(surf_right,rect_right)
elif index==1:
surf_left.fill(randcolor())
sc.blit(surf_left,rect_left)
else:
surf_right.fill(randcolor())
sc.blit(surf_right,rect_right)
pygame.display.update()
pygame.time.delay(100)
Но тогда в трюке с методом update и смысла как будто бы нет,хотя,скорее всего,я просто чего-то не понимаю.