はじめに、私はネットワーキング(ハードウェア、ルーターなど)については十分な知識を持っていますが、ネットワークプログラミングの基本的な知識はほとんどありません。これは馬鹿げた質問のように思えるかもしれませんが、自分のゲームでのマルチプレイヤーの実装を理解しながら、自分が何に興味を持っているのかを知りたいのです。
シンプルな2D配列によって生成されるタイルベースの世界を作成しています。簡単にするために、World [100] [100]のようなものを考えてみましょう。
現在、renderメソッドは、ウィンドウの解像度と1つのタイル(移動中のスムーズなレンダリング用)に基づいてタイルのみをレンダリングします。世界がどれほど大きい場合でも(10x10、1million x 1million)、レンダリングのパフォーマンスは完璧です。
ゲームプレイでは、現在表示されているもの(画面+1にレンダリングされたもの)と、おそらくプレーヤーの周囲の領域にあるタイルのいくつかの情報を知るだけです。
したがって、サーバーから送信されるものはすべて、完全なタイル情報にはなりません。例 地面、地面のタイプ、木などの上に置かれるアイテムは、プレーヤーの視野の外側の領域では重要ではなく、クライアント/プレーヤーがそれらのタイルについて知っておく必要があることだけです。(例:プレーヤー[キャラクターまたはプレーヤー]がレンダリングビューのタイルを超えていることをプレーヤーが知ることができるUltima Onlineの「着信名」。)
私はネットワーキングについてあまり知らないので、おそらくこれを知って、これが私の質問に答えるかもしれません。しかし、これが実現可能な解決策なのか、あるいはアイデアが単に笑えるものなのか、私は興味があります。
送信される情報は、タイルの約10x15の領域であり、各タイルはタイルの内容に関する情報を保持します。より効率的には、すべてがオブジェクトであり、タイルはタイル上のすべてのオブジェクトを保持します。例 Tile [4] [4]は、Sword#23452、Rock2、Tree5、Player3、Monster4を保持します。
初期化/ロード中にまだロードされていない場合、空のタイルは地形タイプ[草、砂、水]のみを送信します。一部のタイルには、少数のオブジェクトがあります[Tree2、Sword#924、Gold、Corpse、Rock3]。
したがって、クライアントが主にロードする必要のあるテクスチャとそれを画面に配置するために配置する必要があるため、タイルがサーバーからクライアントに送信する情報が非常に多いとは思えません。クライアントにレンダリングするように指示するファイルのリストでは、位置は2つの整数のみであり、テクスチャは1つの整数です。
最悪の場合、サーバーは150個のタイルに少数のオブジェクトOnLOADの情報のみを送信し、それ以降は更新によってタイル(存在する場合)と新しいタイル(プレーヤーが方向に移動するたびに10から15)への変更のみを送信します。 )と画面上のキャラクターの移動方向(クライアントがタイル間のスムーズな移動をシミュレートできるようにするため)。
これはインターネットまたはピア間で送信される信じられないほどの量の情報であると私は思っているので、私は正しいと思います。それとも、ネットワーキングについてあまり知らないので、ようやくマルチプレーヤーネットワーキングに関する本を開くことに取り掛かったとき、私の心は打たれるでしょうか。
クライアント/サーバー間で送信される情報の量が非常に少ない場合、初期化時に全世界を単にロードする方が理にかなっていますか?または、世界が大きすぎる場合は「マップ」。そして、LOADの後、更新されたタイルのみを送信しますか?
どうすれば具体的なデータの扱い方を考えているのか。私が参照として使用している本では、オブジェクトを追加および削除するリンクリストが必要なので、すべてがboolです。「キャラクターはいる?木はある?」
オブジェクトを保持するコンテナーや、レンダリングするものをクライアントに伝えるために必要なものだけを送信するサーバーロジックなど、別のアプローチを考えていました。おそらくそれ自体の内部にネットワーク情報を保持するオブジェクトがあり、サーバーから呼び出されたときに送信されます。