読者です 読者をやめる 読者になる 読者になる

通信対戦

少しだけ実装できそうな気がしてきた。というか今まで難しく考えすぎていた。
ゲームの内部計算はサーバーがやる。クライアントはユニットへの指示情報だけをサーバーに送りつつ、ゲームの進行状況を受信して表示する、という風にやれば、クライアントとの通信に遅滞が生じても進行を維持できるはず。
…今まで考えてたのは、マウスとキーボードの操作情報だけの送受信でなんとかする、とか、指示情報のやりとりだけでなんとかする、とか、クライアントもサーバーとは別にゲームの内部計算をやる系の方法。これらはどれも1フレーム遅れたら全てが狂う。


今思いつく懸念事項:
・ユニット一体あたりが数百バイトの容量があるんで、ユニットが多くなってきたときの通信量がちとやばげ。全部送るのではなく、最低限見た目が整うだけのデータを送るようにした方がいい。
・他のオブジェクトへのポインタを含んでる場合の扱いが困る。通信で扱われる全てのオブジェクトにIDをつけてサーバー/クライアント共通の識別子にし、ポインタ廃止して全部IDでやりとり、でなんとかなる?
・IDとか乱数とか、サーバーとクライアントで揃えないといけないデータの取り扱い。IDはサーバーで生成してもらってクライアントはそれを受け取って使う、という風にするしか無い?となると、クライアントは通信が終わるまで新しいオブジェクトを生成できないことになる。ユニットはそれでいいけど、弾やエフェクトはクライアント側で好き勝手に生成できるようにした方がいい。(クライアント側では弾は飾りでしかない。弾当てても、サーバーからデータが来るまで実際のHPは減らない)。乱数も同様の処理で何とかなる?