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))
我正在使用此代码来输出:
但是,当我运行它时,屏幕是黑色的, 如果我将窗口的一半移出计算机屏幕:
并将其移回:
这种情况就会发生。
有人可以解释一下为什么会发生这种情况以及如何解决它。
最佳答案
原因很可能是没有任何东西触发重绘事件。这意味着缓冲区永远不会更新。除非窗口移出屏幕,否则该部分将触发该区域的重绘事件。
手动添加 update或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()
可能是一个好主意:Difference between pygame.display.update and pygame.display.flip
关于python - pygame 屏幕仅在我将窗口移出屏幕时才起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54854176/