1

Pythonでアクションゲームを作っています。インターネットを介して一緒にプレイする 2 人以上のプレーヤーをサポートする必要があります。UDP を選択したのは、遅延の少ないゲームには当然の選択だと思われるからです。私はクライアント サーバー モデルを使用しており、1 人のプレイヤーがゲームをホストすることを望んでいます。これは、1 人のプレーヤーがゲームのホスト (サーバー) とゲームの実行 (クライアント) の両方を同時に行うことを意味します。

これにスレッドを使用する必要がありますか、それとも別のアプローチがありますか? 問題は、Python のドキュメントに serve_forever を使用するように記載されていることですが、非ブロッキング ソリューションが必要です。理想的には、すべてのゲーム ループを呼び出すことができるソリューションが必要です。

4

2 に答える 2

3

「Python のドキュメントでは serve_forever を使用するように指示されています」を参照すると、SocketServer を使用する予定があると思います。モジュールは同期 (フォークまたはスレッド) サーバーを実装しており、非同期ソリューションを探しているようです。

非同期のノンブロッキング ソリューションについては、twisted http://twistedmatrix.com/trac/ (具体的には twisted.internet) を参照してください。

または、非常に具体的なものが必要で、イベント ループを記述してもかまわない場合は、ソケットやその他のリソースに対して poll または select を使用するだけです...

于 2012-05-04T09:49:48.487 に答える
2

UDP は「自然な選択」ではありません。これは、特定の種類のデータ (通常は位置/速度データ) に対する特定の種類の問題 (パケット損失) の最適化です。

ゲームに問題があることを実証できるまで、TCP を使い続ける必要があります。

ノンブロッキング ネットワーキングを Python のゲームに統合するには、Gameで採用されているアプローチを見てください。これは Twisted から PyGame メインループを呼び出します。これは、TCP、UDP、またはソケットを使用するその他のプロトコルでも同様に機能します。

于 2012-05-04T15:05:24.293 に答える