【问题标题】:pygame screen only works when i move the window off the screenpygame 屏幕仅在我将窗口移出屏幕时才有效
【发布时间】:2019-02-24 16:47:40
【问题描述】:
    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))

我正在使用这段代码来输出:

但是,当我运行它时,屏幕是黑色的, 如果我将一半的窗口从电脑屏幕上移开:

并将其移回:

会发生这种情况。

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

【问题讨论】:

    标签: python python-3.x pygame


    【解决方案1】:

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

    在你的 while 结束时手动添加 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

    【讨论】:

    • 呵呵,那你应该看到我的一些问题@Glitchd! “为什么我的连接被拒绝”->“Wops,连接到错误的 IP” ;) 有时最简单的东西会通过我们,有时只是问这个问题会有所帮助:) 祝你项目好运,并继续提问问题!从来没有愚蠢的问题! ^^
    猜你喜欢
    • 2017-11-15
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    相关资源
    最近更新 更多