передача аргумента методу 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 и смысла как будто бы нет,хотя,скорее всего,я просто чего-то не понимаю.


Ответы (0 шт):