この質問は以前に尋ねられたことは知っていますが、pygame の質問が見つかりませんでした。拾うたびにポイントが 5000 増えるコイン パワーアップがあります。しかし、コインを拾うとすぐに別のコインが現れます。もう 30 秒間表示したくありません。プログラム全体を一時停止せずにこれを行うにはどうすればよいでしょうか?
if coin.collidepoint(x,y):
points+=5000
coin=makecoin()
pygameを使用しているため、関数が組み込まれています。
pygame.time.get_ticks()ミリ秒単位で時間を取得 pygame.time.set_timer()繰り返しタイマーを設定。
スケジュールされたモジュールを見てください。これを使用して、新しいコインの作成を延期することができます。
次のように定義されたsというスケジューラーがあると仮定します(Pythonマニュアルの例のように)...
import sched, time
s = sched.scheduler(time.time, time.sleep)
次に、このようにコインが作成されるようにスケジュールします...
if coin.collidepoint(x,y):
points+=5000
s.enter(30, 1, make_coin, ())
また、定期的にs.run()を呼び出して、実行される予定のすべてのものを実行します。きめ細かいタイミングが本当に必要でない限り、ティックごとに呼び出す必要はほとんどありません。
あなたのゲームにはメインループがあります。コインを拾うときは、それを拾って設定する時間を節約する必要がありcoin = None
ます。そのメインループでは、次のようなものが必要です。
if coin is None and current_time > coin_picked_up + 30:
coin = makecoin()
タイマーをお勧めします。それはそれと同じくらい簡単でなければなりません。
from threading import Timer
if coin.collidepoint(x,y):
points+=5000
t = Timer(30.0, makecoin)
t.start()