具体的にどの側面に興味がありますか?モバイルデバイスやアドホックWi-Fiネットワークについては特に特別なことはありません(アドホックネットワークを除いて、すべてのデバイスが相互に通信できるわけではないため、一部のメッシュネットワークは役立ちますが、通常の場合は不必要に問題を複雑にします)。
より広い質問に最初に答えます。それはもっと面白いからです。私の経験では、いくつかの主要な考慮事項があります。
- サーバー/クライアントまたはピアツーピア?これは、世界の真の状態を決定し、これをすべてのクライアントに伝える「マスター」がいるかどうかを意味します。Avaraは、この意味で「ピアツーピア」であると私が知っている唯一のゲームです(ピアは他のすべてのピアにコマンドを送信しました。これは、6人のプレーヤーのゲームのモデムユーザーにとって帯域幅が重いことが証明されました)。ゲームの状態を通信するために、より高度なネットワークトポロジを使用しているゲームを認識していません(たとえば、各LAN上の1つのクライアントにのみデータを送信します)。
- レイテンシーについてどうしますか?Avaraは私が知っている唯一のゲームであり、世界の一貫した状態を取得するために「遅延許容度」によってローカルですべての人に遅れをとっています。これは、誰かがモデムを使用している場合はひどいものでした(圧縮をオフにすると大いに役立ちました)。「レイテンシー補正」を行うにはさまざまな方法があり(たとえば、Half-Life / CSの場合)、その一部はピアツーピアゲームでも機能します。
- 時間同期?クライアント/サーバーゲームの場合、少なくともRTTの変更について心配する必要があります。ピアツーピアゲームの場合、実効最大遅延を最小化するタイミングについても合意したいと思います。
- クライアントが世界の状態について同意しない場合はどうなりますか?Avaraは、ピアに自分の世界の状態を決定させるだけです(パケットのドロップや「遅延許容度」が低すぎるために発生する可能性のある不一致を検出すると、「現実の断片化が検出されました」と表示されます)。
- プレイヤーが去った場合はどうなりますか?P2Pゲームの場合、一貫したゲーム状態に同意する必要がある場合があります(たとえば、他のピアのサブセットにコマンドを送信した後にプレーヤーが切断された場合)。クライアントサーバーゲームの場合、新しいマスターを選択する必要がある場合があります。
そして今、Spaceteamの予告編を見た後:
プロトコルをリバースエンジニアリングしていないので、どのように機能するのかわかりません。ただし、十分に機能するものを作成するのは非常に簡単です。
- ある種のP2Pディスカバリーを使用して、プレーヤーを見つけます(たとえば、Bonjour。そこにはたくさんのドキュメントとサンプルがあるはずです)。
- 仲間と通信します。私はiOS3/4頃のGameKitでこれを行いました(それがまだWi-Fiで動作するかどうかはわかりません)。
- マスターを選出します。これは、 「準備完了」を押した人が最後にマスターになろうとするのと同じくらい簡単です。一部のエッジケースでは、障害を処理する必要がある場合があります。
- マスターにすべてを決めさせてください。Spaceteamはレイテンシーに敏感ではありません。Wi-Fiの待ち時間はせいぜい数ミリ秒になる傾向があり、1つのデバイスが100ミリ秒遅いかどうか(UIが十分に速く応答する限り)は誰も気付かないでしょう。