2011-12-05 1 views
3

After yesterdays私はもう一度やり直しています。パイゲームとねじれを組み合わせた

私は純粋にネットワークプレイを学ぶ目的で、作品にtic tac toe programを持っています。

私が理解していることは、サーバクラスにリアクタを実行させてから、各プレーヤにクライアント(サーバは別のエンティティ)として接続する必要があるということでした。私の最後の質問のコメントを考えれば、私はこれについて完全に間違った方向に行くと思う。

私は何を探していて、どのチュートリアルやドキュメントに焦点を当てるべきですか?

答えて

12

パイゲームとツイストを組み合わせることの難しさは、誰がメインループを制御するのかという問題です。これは、通常、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」をチェックしてください。パイゲーム。

+0

これは本当に便利です。私が仕事から家に帰るとすぐに、私はそれに渦を立てます。 – Teifion

+0

+1 +1。間違いなく、私は最近発見したように、スレッドでPygameを実行したくない... – Claudiu

関連する問題