- ベストアンサー
オンラインゲームを作ったんですが、動きが変です
クライアントサーバ方式で、 クライアントが矢印キーを押したときだけ情報を送信します。 僕のPCでサーバとクライアント1台を起動し、 友人宅でクライアントを起動して動きを見てみたんですが、 僕のキャラクターはスムーズに移動するんですが、友人の方がかなり遅いです。小刻みに震えたりもします(前の位置情報と次の位置情報が交互に反映してるような)。また、自分のPCでクライアント2台でやってみると両方スムーズでした。これは何が原因なのでしょうか。 ちょっとネットワークは初挑戦の分野なので、他にどんな情報を提示すればよいかご指摘ください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
256バイト程度なのに遅延するの?という気持ちもわからないでもないですが、 現状の情報からでは遅延かも?くらいしか言えないかなぁ (もっと詳しい方がいればズバッと解決するかもですが^^;) ということで、sanatoさんの環境で本当に遅延なのかどうか確認してみるといいと思います。 例えば、下記のようなロジックを入れ込みます。 1.クライアントが→を押した時間をデータに付加する 2.クライアントは何らかの処理の後、データを送信する際に発信時刻と番号(例えばクライアント1番の1個目のデータの意味を込めてCLI1-1等)をつけておく 3.サーバーは、受け取ったデータに受け取った時刻を付加する 4.サーバーは何らかの処理の後、クライアントに向けて送信する時刻を付加して送信する 5.クライアントは受け取った時刻をデータに付加する 6.クライアントは表示処理が終わった時刻を添えて、受信データ内容を受け取った順に表示する ※データサイズが256バイトを超えないように。 ※サーバーPCとクライアントPCの時刻も同じに。 これで何に時間がかかってるのかわかるんじゃないかなー。 1-2や5-6に時間がかかっていればクライアントのコードまたはスペックの問題だろうし、 2-3や4-5に時間がかかっていたり、発信順序が入れ替わっていたらネットワーク系だろうし、 3-4ならばサーバのコードまたはスペックの問題だろうし。 こんな感じでしょうか。
その他の回答 (2)
- tochansa
- ベストアンサー率76% (23/30)
面白そうなことしてますね~。 自分はやったことないですけど、ちょっと思うことがあるので書いちゃいます。 >前の位置情報と次の位置情報が交互に反映してるような この辺の情報反映の仕方も問題ありそうな感じがします。 クラサバ間のデータやりとり時に、番号とか時間を埋め込むとかして発信・受信の順序をちゃんと見て、 いらない情報は切り捨てる、あるいは別の処理にする、とか。 あ、切り捨てるとキャラクターがいきなり別のとこに飛んだりしちゃうのかな(汗 データの容量については上記の通りやったことがないのでわかりません。 でも、通信速度どれくらい以上を想定している、とかそういう基準が無いとだれも何も言えないんじゃないかなー
お礼
回答ありがとうございます。全部思いつきで組んでますが面白いです。 データの認証みたいな概念ですね。参考にさせていただきます。 確かにオンラインゲームのサイトの動作環境にもそういうものが書いてますね。 というか今の送受信データのサイズは256バイトなんですが、ネットブックでも余裕だと思うんですがどうなんでしょうかね・・・。
- DIooggooID
- ベストアンサー率27% (1730/6405)
ネットワーク伝送時間による遅延の影響だと思います。
お礼
回答ありがとうございます。 質問内容が悪かったです。そのあたりは予想できたのですが、そういった延滞を無くすにはどういう点に気をつければよいのでしょうか。 プログラムの描画計算そのものはとても軽いので、延滞が起こるのはおかしい気がするのですが。やりとりするデータのサイズはここまでにしておけというセオリーみたいなものがあれば知りたいです。
補足
参考にさせていただきました。 友人のPCで、キーを押してから自分の位置情報を受信して反映させるまでの時間を計ってみましたが、平均0.03秒ほどで、遅くても0.1秒でした。 またクライアント1台ならどこからアクセスしても正常みたい(熊本と静岡から大阪に接続)で、どうやらサーバ側の、受信データを全クライアントに送る際の方式が悪いのではないかと思えてきました。もう少しねばってから再度考察を書こうと思います。