pygame屏幕仅在我将窗口移离屏幕时有效

时间:2019-02-24 16:47:41

标签: python python-3.x pygame

    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 :(得分:3)

其原因很可能是没有任何东西触发重新绘制事件。意味着缓冲区永远不会更新。除非将窗口移到屏幕外,否则该部分将触发该区域的重绘事件。

在片刻结束时手动添加updateflip,应强制更新场景,使外观再次看起来不错:

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()可能是一个好主意:Difference between pygame.display.update and pygame.display.flip