2017-08-21 10 views
0

MIDIキーボードのキーを押すと、イメージをpygameウィンドウに表示しようとしています。画像が1秒間表示されてから消えます。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

あなたによって書かれたコードは瞬時にループが終了し、pygameのはinstaneously画像をクリアしながら、通りの画像を消えるはずです。 あなたがやってみたいことは、キーを押し下げると新しい画像が読み込まれ、偽にならないようにすることだったと思います。

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() 
+0

私は動作しなかった誤った割り当てを取り除こうとしました。また、コード内で何も変更しませんでした。 –

+0

申し訳ありません私はそれが保存されていないと思います私は編集しました。それが機能するかどうか確認してください。 –

1

これは、Pythonまたはpygameのに問題はないが、正しい使用方法で:while goingループ内のコードは、第あたり複数回実行されるが、イベント(MIDIキーを押して)、一度だけ上昇させます。

あなたはたとえばshow_imageのために、状態のいくつかの種類をトリガするプログラムロジックを変更する必要があります:MIDIイベントが検出されたときに、show_image = Trueを設定し、whileループでは、すべてのイベントのshow_image == True(独立がでトリガする場合にのみ画像を表示このループの繰り返し)

は、基本的なロジックは次のようにする必要があります:もちろん

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のいくつかのより多くの巧妙なロジックを持っている必要があります。

+0

私は基本的にそれをやってみたと思います。私は[pygame.midi.MIDIIN]のe.type:NoteList.append(MIDI_key)を試してから、MIDI_keyに基づいてイメージを印刷するためにループを実行しますが、それでもそれは消えます。そして、もし私がループやif文の外でそれをやろうとすると、NoteList()に値がある前にイメージをblitしようとするため、範囲外のエラーが出ます。 –

+0

私はいくつかの説明を追加しました – user3151902

+0

今度はNoteList.append()とshow = True、show == Trueの場合.....そしてそれはうまくいきました。しかし、今度は別のMIDI入力に基づいて別の画像をblitしようとすると、前の画像は消えます。 –

関連する問題