如果我按下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()
答案 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()