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))
我正在使用此代码输出:
但是,当我运行它时,屏幕为黑色, 如果我将窗口的一半移出计算机屏幕:
然后将其移回
发生了。
有人可以解释为什么会发生这种情况以及如何解决它。
答案 0 :(得分:3)
其原因很可能是没有任何东西触发重新绘制事件。意味着缓冲区永远不会更新。除非将窗口移到屏幕外,否则该部分将触发该区域的重绘事件。
在片刻结束时手动添加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