экран Pygame работает только когда я переместить окно за пределы экрана - PullRequest
0 голосов
/ 24 февраля 2019
    import pygame, sys
from pygame.locals import *
pygame.init()

sizex = 400
sizey = 300
tilesize = 25

tile = pygame.image.load('images/tile.png')
tile = pygame.transform.scale(tile, (tilesize, tilesize))

screen = pygame.display.set_mode((sizex,sizey))

while True:

    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
    for row in range(sizex):
        for column in range(sizey):
            screen.blit(tile,(column*tilesize, row*tilesize,tilesize,tilesize))

Я использую этот код для вывода:

enter image description here

однако, когда я запускаю его, экран становится черным, если я перемещаю половинуокна за пределами экрана компьютера:

picture

и переместите его назад:

picture

что происходит.

Может кто-нибудь объяснить, почему это происходит и как это исправить.

1 Ответ

0 голосов
/ 24 февраля 2019

Причина этого, скорее всего, в том, что ничто не вызывает событие перерисовки.Значение буфера никогда не обновляется.За исключением случаев, когда окно перемещается за пределы экрана, эта часть будет вызывать событие перерисовки для этой области.

Добавление вручную обновления или flip вКонец вашего времени, должен вызвать обновление сцены, чтобы все снова выглядело хорошо:

import pygame, sys
from pygame.locals import *
pygame.init()

sizex = 400
sizey = 300
tilesize = 25

tile = pygame.image.load('images/tile.png')
tile = pygame.transform.scale(tile, (tilesize, tilesize))

screen = pygame.display.set_mode((sizex,sizey))

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
    for row in range(sizex):
        for column in range(sizey):
            screen.blit(tile,(column*tilesize, row*tilesize,tilesize,tilesize))

    pygame.display.flip() # or pygame.display.update()

Для тех, кто знаком с pygame / gl и обновлениями экрана, это будет несколько обременительным.В идеальных случаях вы должны обновлять только те области, которые нуждаются в обновлениях.
Например, отслеживание того, какие части экрана вы переместили, или какие события мыши вызвали определенные элементы на экране.А затем выполните pygame.display.update(rectangle_list) только с областью для обновления.

Вот хорошее описание того, что они делают, и почему использование update() может быть хорошей идеей: Разница между pygame.display.updateи pygame.display.flip

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...