pygame图像立即消失

时间:2017-08-21 20:08:02

标签: python pygame

如果我按下MIDI键盘上的按键,我试图让图像出现在pygame窗口中。图像显示一秒钟然后消失。

going = True
while going:
    screen.fill(white)
    events = pygame.event.get()
    for e in events:
        if e.type in [QUIT]:
            going = False
        if e.type in [KEYDOWN]:
            going = False
            events = pygame.event.get()
        if e.type in [pygame.midi.MIDIIN]:
            screen.blit(IMG, (50, 60))
        pygame.display.update()
pygame.quit()

并且这也不起作用..

if e.type in [pygame.midi.MIDIIN]:
    screen.blit(IMG, (50, 60))
    pygame.display.update()

2 个答案:

答案 0 :(得分:1)

这不是Python或Pygame的问题,但使用正确:while going循环内的代码每秒多次执行 ,但事件(MIDI键按下)只提出一次。

您需要更改程序逻辑以触发某种状态,例如show_image:当检测到MIDI事件时,设置show_image = True并在while循环中,仅在{show_image == True时显示图像{1}}(独立于此循环迭代中触发的任何事件)

基本逻辑应该是这样的:

going = True
show_image_1 = False
show_image_2 = False
...
while going:
    screen.fill(white)
    events = pygame.event.get()
    for e in events:
        if e.type in [QUIT]:
            going = False
        if e.type in ...:
            show_image_1 = True
        if e.type in ...:
            show_image_2 = True
        ...
    if show_image_1:
        screen.blit(IMG_1, (50, 60))
    if show_image_2:
        screen.blit(IMG_2, (50, 60))
    ...
    pygame.display.update()

当然,如果您有多个图像,那么每个图像都应该有一些更聪明的逻辑而不是if

答案 1 :(得分:0)

您编写的代码应立即消失图像,因为while循环终止并且pygame会立即清除图像。 我认为你要做的是按下关键新图像应加载,这样你就不会做错。

going = True
while going:
    screen.fill(white)
    events = pygame.event.get()
    for e in events:
        if e.type in [QUIT]:
            going = False
        if e.type in [KEYDOWN]:
            events = pygame.event.get()
        if e.type in [pygame.midi.MIDIIN]:
            screen.blit(IMG, (50, 60))
        pygame.display.update()
pygame.quit()