パイゲームとツイストを組み合わせることの難しさは、誰がメインループを制御するのかという問題です。これは、通常、UI(GTK、Tkinterなど)のメインループとTwistedを組み合わせることを望んでおり、PyGameも変わりません。
ネットワークレイテンシが重要で、ツイストが非常に良いスケジューリングフレームワークを持っているので、ツイストリアクタを実行させてメインループを制御してから、LoopingCallを使用してパイゲームのイベントを処理する非常に基本的で
:
from twisted.internet.task import LoopingCall
DESIRED_FPS = 30.0 # 30 frames per second
def game_tick():
events = pygame.events.get()
for event in events:
# Process input events
redraw()
# Set up a looping call every 1/30th of a second to run your game tick
tick = LoopingCall(game_tick)
tick.start(1.0/DESIRED_FPS)
# Set up anything else twisted here, like listening sockets
reactor.run() # Omit this if this is a tap/tac file
これが最初で、簡単なようだが、それは危険が付属しています。ゲームのダニで処理するのに多くの時間を費やすと、ねじれた原子炉を飢えさせる危険があり、イベントを処理できなくなります。時間を計られたイベントが必要な場合は、ブロックしないでください。reactor.callLater
のようなねじれたツールを使用してください。ブロックしないようにすればするほど、アプリケーションの応答性が向上します。これは、いくつかの段落で説明するにはあまりにも多くのことがあります。ツイストのプログラミングは、非同期ライブラリまたは非ブロッキングライブラリのプログラミングを一度もやっていない人にとっては慣れ親しんでいます。
より完全な例として、ねじれたもの(シミュレーションイベントの世界時計を含む)とツイストされた開発者のサンプルゲームとのインタフェースのためのゲームライブラリについては、「gam3」をチェックしてください。パイゲーム。
これは本当に便利です。私が仕事から家に帰るとすぐに、私はそれに渦を立てます。 – Teifion
+1 +1。間違いなく、私は最近発見したように、スレッドでPygameを実行したくない... – Claudiu