2016-10-24 9 views
0

自分の目標は、画像をループして画面に表示することです。ユーザーがスペースを押すと、新しい画面に移動すると見なされます。何らかの理由で、ユーザーがスペースを押したときとゲーム1のループから逸脱したときのずれがあります。pygame.time.delay()を使用すると、Pygameの入力ラグが発生する

def game_loop1(): 
     game1=True 
     winScreen=True 
     current=0 
     myfont = pygame.font.SysFont("monospace", 25) 
     label = myfont.render("Who is this person? (Press Space)", 1, (0,0,0)) 


    while game1: 
      for event in pygame.event.get(): 

       if event.type == pygame.QUIT: 
        pygame.quit() 
       if event.type == pygame.KEYDOWN: 
        if event.key==pygame.K_SPACE: 
         game1=False # doesn't break out of loop immediately here 
     gameDisplay.fill(white) 
     gameDisplay.blit(label,(0,500)) 
     gameDisplay.blit(obama[current], (0,0)) 
     current+=1 
     pygame.display.flip() 
     clock.tick(50) 
     pygame.time.delay(2500) 


    while winScreen: 
     gameDisplay.fill(white) 
     winLabel=myfont.render("The person was Obama! ", 1, (0,0,0)) 
     gameDisplay.blit(winLabel,(0,500)) 
     gameDisplay.blit(obama[len(obama)-1], (0,0)) 
     pygame.display.flip() 
     pygame.time.delay(2500) 
     winScreen=False 

これを修正するにはどうすればよいですか?

+0

なぜあなたは 'pygame.time.delay(2500)'を使用していますか? – MooingRawr

+0

pygameが停止するまで、新しいイベント(終了)を与えるのを止めています。ボタンを押すと、指定した時間後にループを変更して新しい画像に切り替える必要があります。 –

+0

'game1 = False'を設定すると、なぜすぐにループから抜け出すのですか?現在の繰り返しが完了するまで(ループの最後に遅延呼び出しが追加されているため、再評価が明らかに遅れるため)、ループの条件は再評価されません。 – UnholySheep

答えて

0

あなたは試みることができる:

game1=False 
break 

をすぐにwhileループを終了します。

しかし、この場合、実際には変数game1は必要ありません。ループの状態をTrueに変更し、game1=Falsebreakに置き換えると、コードが期待通りに機能するはずです。

関連する問題