python - pygame 屏幕仅在我将窗口移出屏幕时才起作用

标签 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

这种情况就会发生。

有人可以解释一下为什么会发生这种情况以及如何解决它。

最佳答案

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

手动添加 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

关于python - pygame 屏幕仅在我将窗口移出屏幕时才起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54854176/

相关文章:

python-3.x - 在第一个示例之后跳过场景(python Behave)

python - 在while循环中从服务器接收数据显示窗口没有响应

python - PyGame - 无法使用 blit() 调用在屏幕上提供文本

python - Django 监听器听不到信号

java - 将代码从 java 转换为 python

python - LAPACK例程中的WORK参数有什么用?

python - 为什么我的 pygame 窗口在关闭之前只保持打开一秒钟?

python - GDB自动加载Python脚本

python-3.x - Anaconda Prompt 找到库,cmd -> Python 没有。 Python 只安装了 Anaconda 包,没有别的

python - 我有一个巨大的 If 语句列表,想清理我的代码