2端末を利用した対戦ゲームを作成するために、WebSocketsを使い2端末で入力した情報を共有するコードを書いてみた。
参考にしたのは公式ドキュメントの「Manage application state」。
(参考URL)
公式ドキュメントには、状態の制御・管理(server側の処理)は「Python」、画面の表示・入力(client側の処理)は「JavaScript」で書かれている。
「Pygame」でゲーム製作中なので、せっかくなので「JavaScript」で書かれている部分を「Pygame」で書き直してみた。
書き直したコードは下記のページに掲載
書き換えで苦労した箇所
参考元のclient側(JavaScript)では、他端末からの入力を「onmessage」イベントで検知して画面に反映させているが、「Python」で同じ処理、検知出来るイベントの書き方が分からなかった。
結局、client側では0.5秒毎にサーバに状態を確認し画面に反映させる繰り返し処理をさせ、server側で状態確認用の指令を受信、状態をclientに送信する処理を書き加えた。
課題
状態変更(value+1or-1)を高速で連続実行すると、画面に反映されるまでに時間がかかってしまう。この原因は、状態確認と状態変更のsend・receiveが同じwebsocketsを利用しているからである。
-
- 画面状態確認:0.5秒毎にsend・receive処理
- 状態変更: p または m 押下時にsend・receive処理
上記2「状態変更」連続実行中に1の状態確認が実行されると、1のreceive処理で2の状態変更でsendした情報が受信されてしまう。
どう改修すれば良いかは未だ検討中。