2 つのスレッドを持つアプリケーションがあります。そのネットワーク制御ゲーム、
1. スレッド (サーバー)
- ソケット接続を受け入れてメッセージを受信する
- メッセージが送信されたら、イベントを作成してキューに追加します
コード:
class SingleTCPHandler(SocketServer.StreamRequestHandler):
def handle(self):
try:
while True:
sleep(0.06)
message = self.rfile.readline().strip()
my_event = pygame.event.Event(USEREVENT, {'control':message})
print message
pygame.event.post(my_event)
2. スレッド (pygame)
- ゲーム演出担当
- サーバーが入力するイベントキューを介してメッセージを受信します
- 60ms ごとのメッセージに基づいてゲームをレンダリングします
これがゲームの外観です。制御メッセージは、小さな正方形の速度です。
デバッグの目的で、次を使用して仮想マシンからサーバーに接続します。
ncat 192.168.56.1 2000
そして、制御メッセージを送信します。本番環境では、これらのメッセージは Android デバイスによって 50 ミリ秒ごとに送信されます。
問題
私のデバッグ環境では、数秒間隔でメッセージを手動で入力します。その間、ゲームは何度もレンダリングされます。何が起こるかというと、message
(サーバー コード内の) は以前に受信した値で常にレンダリングされます。
以下を送ります。
1:0.5
アプリが開始されたコンソールで、print message
サーバーコードの行により次のメッセージが表示されます。
alan@alan ~/.../py $ python main.py
1:0.5
ゲームが行うことは、この値を常に (レンダリングする期間で、数秒ごとに入力するのではなく) 受け取るように動作することです。
print message
それが起こっているので、これwhile True
も常に出力され、出力は次のようになると予想されます。
alan@alan ~/.../py $ python main.py
1:0.5
1:0.5
1:0.5
1:0.5
....
しかし、そうではありません。アドバイスしてください(説明が不十分な場合は、件名を何に変更するかについての提案も受け付けています)