Re: ネットワークゲームはどう作ればいい? ( No.1 ) |
- 名前:Will 日時:2009/07/08 10:35
長文すいません。
> 全てのキャラの移動操作を送信するようにすればいいのかなと思っていますが、
> 1フレームごとに全ての情報が集まり、受け取れるまで次のフレームに移動出来ない仕様で、
この設計では無理だと思います。
ぱっと考えただけで以下のような問題があります。
1.DXLibはTCP通信なので信頼性はあるが通信オーバヘッドが大きすぎる
2.サーバは各クライアントからのデータ受信もこなしつつ、0.016秒ごとにクライアントに10個のデータを送信する必要があるわけだかそんなことは多分不可能。
3.TCPにしろUDPにしろデータ送信関数を実行しても、直ちに送信される保証はないし到達するまでにどれだけの時間がかかるかも保障してない
これはDXLibの仕様ではなくTCPとかUDPの仕様です。
そのため、2の問題がなかったとして、サーバが0.016秒ごとに全クライアントに対してデータ送信することが出来たとしても
時間内にクライアントに到達する保証もないし、各クライアントで受信するまでのタイムラグが異なるので
あるクライアントでは60FPSを維持できるけど、あるクライアントでは出来ないということが発生します。
私ならば以下のように設計します。
・UDPを使用する
・(サーバが全クライアントに送信するデータが同じであるならば)サーバからのデータ配信はマルチキャスト方式を採用する
・サーバ側もクライアント側もデータがきちんと届くことを前提とした作りには絶対しない
主にクライアント側の設計になりますが
データが届くかどうかによらず60FPSで描画する。
届かなかったときは他プレイヤーの動きは前回情報を元にクライアントで補完し、
データが届いたときに修正する。
例えば、右に動こうとしているプレイヤーはそのまま右に動いているように描画し、
データが届いたときに正しい位置に描画しなおす。
・サーバ−クライアント間で送受信するデータは、各プレイヤーがどういう操作をしたかではなく
今どこにいるかという位置情報にする
|
Re: ネットワークゲームはどう作ればいい? ( No.2 ) |
- 名前:Hima 日時:2009/07/09 02:32
私もネットワークゲームのことがよく知らないですが、この本を買ってました.
hxxp://www.amazon.co.jp/14歳からはじめるC言語オンラインゲームプログラミング教室-Windows-XP-Vista対応-有一郎/dp/4899772408
この本はDxLibを使いし、サンプルゲームもぷよ○よオンライン系のゲームですから、きっといいと思いますよ。
|
Re: ネットワークゲームはどう作ればいい? ( No.3 ) |
- 名前:Dixq 日時:2009/07/09 22:44
>Willさん
>Himaさん
ご回答ありがとうございます。
そうですよね。TCPを使う意味がないですし、socket.hとかの関数で自作した方が早そうですね。
後
>サーバ−クライアント間で送受信するデータは、各プレイヤーがどういう操作をしたか
>ではなく今どこにいるかという位置情報にする
ということですが、そうなると、爆風に接触して被弾したようなアクションになったはずが、
修正で、被弾していない状態に変更するようなことが起きてくるのでしょうか?
また、フレームが飛ぶと、いつ爆弾を置いたか、蹴った、投げたかなど、制御が難しくなるような気がします・・。
この辺詳しく知りたいなら書籍で学んだ方がよさそうですね。
Himaさんがご紹介下さった本も見てみます。ありがとうございました。
|
Re: ネットワークゲームはどう作ればいい? ( No.4 ) |
- 名前:Will 日時:2009/07/10 10:00
> ということですが、そうなると、爆風に接触して被弾したようなアクションになったはずが、
> 修正で、被弾していない状態に変更するようなことが起きてくるのでしょうか?
プレイヤーの生死にかかわるような情報はサーバから受信するべきであり、
その判定も各クライアントではなく、サーバで一括管理したほうがスマートと考えます。
そのため、あるクライアントでは他プレイヤーが爆風に触れているのに死なないとか、
逆に触れていないのに死ぬとかいう状況が発生する可能性はあります。
(市販ネットゲーでも重い時間帯だと他プレイヤーの瞬間移動などは発生しますよね)
この辺はクライアント側での補正の仕方によりますので
プログラマーの腕の見せ所ですね。
> フレームが飛ぶと、いつ爆弾を置いたか、蹴った、投げたかなど、制御が難しくなるような気がします・・。
PC単体ソフトの場合、フレーム処理をベースにした設計は問題ないと思いますが
ネットゲーでは、通信データの送受信というところから設計を考えていかないと
難しくなると思います。
まず、サーバとクライアントでの機能分担とか通信データの内容とかを設計し
クライアントでの描画設計はそれからだと思います。
|
Re: ネットワークゲームはどう作ればいい? ( No.5 ) |
- 名前:Dixq 日時:2009/07/14 21:09
Willさん、引き続きご回答ありがとうございます。
なるほど、いくらなんでも生き返るのはおかしいですもんね。
う〜ん、制御は難しいところですね〜・・。
そして確かに重い時間帯、オンラインゲームしていると瞬間移動している人とかいますね。
オンラインゲームだと、オフラインゲームより格段に制御が難しそうですね。
制御とフレーム、その関係をよく考えて見たいと思います。
ご回答ありがとうございました。
|
Re: ネットワークゲームはどう作ればいい? ( No.6 ) |
- 名前:yama 日時:2009/07/17 16:22
参考になるか分かりませんが
僕がいつもやってるリアルタイムのオンラインゲーム(格ゲー)は、パソコンごとに決められたdelayという値があって、入力した時点からゲームに反映するまでに若干のラグがあります。
ラグと言ってもだいたい1フレームから6フレームぐらいですが、ほとんど気づきません。
あと、キーを送信するピッチを設定することができます。普通は1フレーム1パケットですが、2フレームごとに1パケットとか、3フレームに1パケットとか。
ピッチが速いと快適ですが、pingが大きいと逆にカクカクすることもあります。
ピッチが遅いと処理落ちみたいな挙動はしませんが、なんだかぬるっとした操作感で、細かい操作ができない気がします。(これもすぐ慣れる)
でもレースやぷよぷよはリアルタイム性より操作性重視な気がしますね。
瞬間移動もよくあるし。
|
Re: ネットワークゲームはどう作ればいい? ( No.7 ) |
- 名前:Dixq 日時:2009/07/21 20:10
>yamaさん
ご回答ありがとうございます。
なるほど、delayという手があるのですね。
その辺のフレームの設定は試行錯誤で調整してみたいと思います。
貴重なご意見ありがとうございます。
|