1

pygame.time.set_timer(event,milliseconds)2 つの USEREVENT をキューに追加するために使用しています。毎秒 USEREVENT+1 (1000ms)、5ms ごとに USEREVENT。これは、取得する USEREVENT+1 ごとに 200 の USEREVENT を取得することを意味する必要があります。私は100のイベントしか取得しません。

タイマーが持つことができる最小の遅延は10msのようです。これを使用して FPS を制御しようとしていますが、USEREVENT+1 信号でゲーム ロジックを 1 刻みで「更新」しますが、タイマーの上限が 10 ミリ秒未満の場合は、それよりも高くなることはできません。 100fps。誰かが理由を知っていますか?

また、ボーナス ポイントの場合、ミリ秒は整数でなければなりません。つまり、1000 の倍数 (10、20、25、50、100 など) の fps しか持てません。この方法で、たとえば 60fps を達成するにはどうすればよいと思いますか? 本来は次のフレームまで寝ていたのですが、CPUに優しくしたいのでティック間でアイドリングしたいです。pygame.event.wait は、イベントがキューに入るまでアイドル状態になるため、pygame.time.set_timer を使用しているのはこのためです。

4

1 に答える 1

1

FPS を制限するには、次を使用します。Clock.tick(fps_cap)

http://www.pygame.org/docs/ref/time.html#Clock.tick このメソッドは、フレームごとに 1 回呼び出す必要があります。前回の呼び出しから経過したミリ秒数を計算します。

オプションのフレームレート引数を渡すと、関数は遅延して、指定されたティック/秒よりも遅くゲームを実行し続けます。これは、ゲームの実行速度を制限するために使用できます。フレームごとに 1 回 Clock.tick(40) を呼び出すことにより、プログラムは 1 秒あたり 40 フレームを超えて実行されることはありません。

この関数は、すべてのプラットフォームで正確ではない SDL_Delay 関数を使用しますが、CPU をあまり使用しないことに注意してください。正確なタイマーが必要な場合は tick_busy_loop を使用し、CPU を噛むことを気にしません。

于 2012-10-29T03:21:26.370 に答える