2017-05-26 20 views
1

私は、プレイヤーが勝利したときに画面にメッセージを表示し、テキストを5秒間表示してから、メインメニューの開始画面に戻るようにしたいと考えています。しかし、time.delay関数を使用すると、私の画面は一時停止し、テキストをフラッシュで表示しますが、すぐに開始画面に移動します。テキストを読み込むのに十分長く表示させるより効率的な方法はありますか?以下は 一定の時間だけテキストを表示する方法は?

は、私が実際にメッセージを表示するために使用する機能です。

def winnerPlayerOne(): 
    screen.fill(PINK) 
    winnerP1Message = winnerFont.render("Congrats Player 1. You Win!", True, WHITE) 
    screen.blit(winnerP1Message, ((400 - (winnerP1Message.get_width()/2)),(300 - (winnerP1Message.get_height()/2)))) 
    pygame.display.update() 
    pygame.time.delay(5000) 

    startscreen() 

をそしてこの下に、私は、メインループ内で、この関数を呼び出す方法です:

 if playeroneScore == 5: 
      winnerPlayerOne() 

     if playertwoScore == 5: 
      winnerPlayerTwo() 

すべてのヘルプは非常だろう感謝!

+0

インデントを修正できますか?機能に 'startscreen'はありますか? – tdelaney

+0

startscreenは、その上のすべてのコードの後に​​呼び出され、テキストを表示した後に開始画面に移動します。 – Student

+0

それはそれが関数の一部であることを意味しますか? – tdelaney

答えて

1

pygame.time.wait(5000)を試してください。それはあなたが期待している方法でより多く行動しなければなりません。それはバックグラウンドでもコードが実行されることを防ぎますが、それはあなたのユースケースの問題ではないようです。

+0

time.waitを使用すると、テキストも表示されず、5秒間停止してから開始画面に移動します。 – Student

+0

オーウェンカミングスの方が優れているようです。 –

1

あなたのケースではおそらくベンジャミンの答えがうまくいくでしょう。あなたがゲームのビジュアルに干渉しない何かをしたい場合はしかし、私は...そうのようにタイマーを設定することを検討してしまう

WITHIN GAME LOOP: 
     if gameWonScreen: 
      screen.fill(PINK) 
      winnerP1Message = winnerFont.render("Congrats Player 1. You Win!", True, WHITE) 
      screen.blit(winnerP1Message, ((400 - (winnerP1Message.get_width()/2)),(300 - (winnerP1Message.get_height()/2)))) 
      timer = timer + elapsed/1000 
      elapsed = fpsClock.tick(FPS) 
      if timer > timeWinScreen: 
       gameWonScreen = false 

アプリケーションの開始時に希望のメッセージの期間に初期化「timeWinScreen」と設定プレイヤーが勝利した場合、 'timer'を '0'に、gameWonScreenを 'true'に設定します。 elapsed = fpsClock.tick(FPS)を使用すると、最後のティック以降の時間値が保持されます。このプロセスのために使用する必要はありません(FPSのほんの一部を使用することもできます)が、「elapsed」を使用することは、特定のオブジェクトのアニメーションをスムーズにするのに役立ちます。