pygame可调整大小的窗口,表面未正确更新

时间:2019-11-18 23:42:42

标签: pygame

我正在使用pygame通过一些不同的图形绘制算法绘制图形。以前,我的大小是固定的,但现在我希望它的大小可以调整。在某些情况下,我能够调整大小以进行工作。例如,当我按下客户端顶部的“调整大小”窗口按钮并正确填充表面时,它就可以工作。但是,如果我尝试通过拖动角点来调整窗口大小,则必须非常缓慢地进行操作,否则它将无法工作。有没有一种方法可以让我拖动pygame更快地更新。我看过其他示例,但无法使其适用于我的情况,也许是因为我也在使用thorpy吗? 主循环事件代码为:

playing_game=True
clock = pygame.time.Clock()
while playing_game:
    pygame.event.pump()
    event=pygame.event.wait()
    if event.type == QUIT:
        playing_game = False
        pygame.display.quit()
        break
    elif event.type == VIDEORESIZE:
        myMenu.display = pygame.display.set_mode(event.dict['size'], HWSURFACE|DOUBLEBUF|RESIZABLE) 
        myMenu.resize(200, event.dict['h'], event.dict['w'], event.dict['h'])
        myMenu.itemMenu.blit_and_update() 

    pygame.display.update()  
    clock.tick(60)
    myMenu.itemMenu.react(event)

完整代码可在以下位置找到:https://github.com/CamiloJac/GraphVis

在按下调整大小窗口按钮时可以正常工作 BarycentreSpringFullscreen

当我拖动屏幕边缘时工作不正常 IncorrectResizing

1 个答案:

答案 0 :(得分:0)

我怀疑pygame.event.pump()event=pygame.event.wait()的组合导致事件丢失。

event.wait()仅处理一个单个事件,然后pump()告诉PyGame处理其余事件。我猜正在发生某种形式的混淆,并且调整大小丢失了。

我可以通过调整大小来处理所有事件:

SURFACE = pygame.HWSURFACE|pygame.DOUBLEBUF|pygame.RESIZABLE

...

while ( not done ):

    # Handle user-input
    for event in pygame.event.get():
        if ( event.type == pygame.QUIT ):
            done = True
        elif ( event.type == pygame.VIDEORESIZE ):
            WINDOW_WIDTH  = event.w
            WINDOW_HEIGHT = event.h
            window        = pygame.display.set_mode( ( WINDOW_WIDTH, WINDOW_HEIGHT ), SURFACE )