3

Pygame を使用してスネーク型のゲームを作成しています。すべてがほとんど機能していますが、以下は私のゲームの終わりです。効果音もあり、音の再生が終わる前にウィンドウが閉じないように遅延を入れました。それはすべて正常に機能し、ゲームオーバーのテキストに追加しました. 何らかの理由で、サウンドが再生され、ゲームが一時停止し、ゲームオーバーが画面上ですばやく点滅します。なぜこれがうまくいかないのか、誰かが私に説明できますか?

Mac 10.6.8 で Python 2.7 を使用しています。

if w.crashed or w.x<=0 or w.x >= width - 1 or w.y<=0 or w.y >= height -1:
    gameover.play()
    font = pygame.font.Font(None, 80)
    end_game = font.render("Game Over!", True, (255, 0, 0), (0,0,0))
    endRect = end_game.get_rect(centerx = width/2, centery = height / 2)
    screen.blit(end_game, endRect)
    pygame.time.delay(3500)
    running = False
4

3 に答える 3

2

それはあなたが行方不明であるpygame.display.flip()か、電話display.update(rectangle=endRect)の直後である可能性がありますか?screen.blit()

于 2012-10-17T22:16:45.400 に答える
0

あなたの問題はrunningバリバールにあると思います。これでメインのwhileループ*が終了すると、プログラムが終了します。これが問題になります。

*メインのwhileループ:

while running:
    #everything that the program does goes here

ほとんどのゲームには1つあり、それに影響を与えるために何かを行うとループが台無しになり、プログラム内のすべてが終了します。質問で表示したコードはそのループ内にあるため、テキストとサウンドは再生されません。

pythonがdelayコマンドを見つけたときにプログラムを一時停止するのは理にかなっていますが、実際にはプログラムを一時停止しません。pygameを一時停止するだけです。プログラムは実行を継続し、に割り当てrunningfalseループは終了しました。フォントはループ内にあるためレンダリングされず、pygameが一時停止されているためサウンドは再生されません。これはwhileループで呼び出されたイベントであり、現在は閉じられているため、一時停止を解除することはありません。

ちなみに、Pygameが「フリーズ」ウィンドウを開いたままにする理由は、画面上の他のすべての画像とフォントの変数が同じままであり、閉じるように指示されていないためです。

もちろん、running変数が私が思っているものでなければ、この答え全体が私たちの両方の時間の無駄になる可能性があります。

価値のある質問:)

于 2012-10-17T22:08:15.483 に答える