在pygame中的screen.blit(图像),图像消失

时间:2017-08-11 17:11:15

标签: python pygame

我试图基于一个事件,midi输入在pygame窗口中blit图像,然后根据下一个事件另一个midi输入blit另一个图像。这里发生的是当我按下midi键盘上的一个键时,图像弹出一秒钟。我需要它留在窗口,即使我输入另一个输入并blit另一个图像。这会发生的事情是我的midi键盘上的每个键都被记录为一个数字(1-88)并添加到NoteList[]然后使用hNoteList窗口中的图像是blit,h中的一个项目1}}作为x坐标。在我的实际pygame中,going = True while going: screen.fill(white) events = event_get() NoteList=[] 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]: print(str(e.data1)) NoteList.append(int(e.data1-20)) for h in NoteList: screen.blit(EthnoteIMG, (int(h), 100)) pygame.display.update() 变量也将经历一系列函数,我只是想在一个更简单的pygame窗口中找出这个部分。

{}

2 个答案:

答案 0 :(得分:0)

我相信问题是,每次while循环运行时你都会填满屏幕,但是当事件发生时你只是在屏幕上显示那个图像......

试试这个:

screen.fill(white)
going = True
while going:
    events = event_get()
    NoteList=[]
    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]:
            print(str(e.data1))
            NoteList.append(int(e.data1-20))
    for h in NoteList:
        screen.fill(white)
        screen.blit(EthnoteIMG, (int(h), 100))
    pygame.display.update()

答案 1 :(得分:0)

如果注释应该保留,则需要在while循环之外定义NoteList,否则每次迭代都会创建一个新的空列表。

NoteList = []

going = True
while going:
    for e in pygame.event.get():
        if e.type == pygame.QUIT:
            going = False
        elif e.type == pygame.midi.MIDIIN:
            print(str(e.data1))
            NoteList.append(int(e.data1-20))

    screen.fill(white)

    for h in NoteList:
        screen.blit(EthnoteIMG, (int(h), 100))

    pygame.display.update()

您可以使用enumerate功能移动位置:

for g, h in enumerate(NoteList):
    screen.blit(EthnoteIMG, (g*12, int(h)))