トップページ > 過去ログ > 記事閲覧
通信対戦のゲーム
名前:Ch 日時: 2009/11/18 21:01

はじめまして。 此度通信を使っての対戦ゲーム。 (シューティングゲームで対戦をするゲーム) を作ろうと思ったのですが、 どうも処理が重くなってしまい、 手詰まりになってしまったため質問する事にしました。 現在、送信するデータとして、以下のものを送信しています。構造体でデータを送信しています。 ・プレイヤー(自分、相手) ・弾(自分、相手) プレイヤーの送信だけだった時は特に問題はなかったのですが、弾の情報を送信した時に急に動作が重くなってしまいました。 弾の情報は現在のところ構造体で40バイト程度、それが512個です。この状態でほとんど画面が動かなくなる位に処理が重くなってしまいました。 これは、データの送信の仕方が悪いのでしょうか、それともパソコンのスペック的な問題なのでしょうか。

Page: 1 |

Re: 通信対戦のゲーム ( No.1 )
名前:ar 日時:2009/11/19 08:02

ネット通信を使ったゲームは使ったことがないので参考になるかは分かりませんが、通信による負荷が高いとのことでしたら情報力を減らしてみてはいかがでしょう。 弾の情報そのものを送るのではなく、誰が、どこで、何を、撃ったか程度の情報を識別番号で送る…など。 要は、処理に必要な情報が交換出来ればよいのですからゲームの仕様上ある程度決まっていること(撃った後の弾の動き等)は受信側で処理する事も出来るのではないでしょうか。 長くショットボタンを撃つ感じのゲームでしたら押してる間だけ最初のショットのコピーで処理して座標だけ受け取る等。ゲームの仕様に合わせて工夫されるとよいかと思います。
Re: 通信対戦のゲーム ( No.2 )
名前:Will 日時:2009/11/19 09:55

arさんの回答に+αで、より高度にしたい場合のアドバイスです。 ネットゲーを作る場合、絶対に考慮しなければならないのは 「送信したデータが届くことを前提に設計してはならない」 です。 そのため、相手からデータが届かないと処理が進まないような設計にしてはいけません。 送信するデータを小さくしても、PCのスペックを限りなく上昇させたとしても、 データがどのぐらいの時間で届くかどうかはネットワークの仕様上保障されていません。 (特定の環境に絞り込めば効果がある場合もあるでしょうが) 画面描画 ↓ 次のデータが届くのを待つ ↓ 届いたデータを元に次の画面描画 というような、データが受信できるまでにかかる時間が処理速度にもろに影響するような つくりはネットゲーには向かない設計です。 上記を踏まえ、例えば次のフレームを描画する際に必要なデータが相手から届いていない場合は 受信側で前回までに受け取ったデータを元に次に届くであろうデータを推測し補完し、 遅れて届いたデータとの差異があれば、次のフレームを描画するさいに修正する というようなことをすれば、通信機能と描画機能が独立性が高くなるので、 データ受信が遅れたとたんに処理が重くなるというようなことがなくなります。 あとは、なるべく早く届いて欲しいデータと多少後れても良いデータに切り分けて、 送信タイミングを考慮してみるとか、TCPではなくUDPを使用する(DXライブラリだと無理ですが) というのもあります。
Re: 通信対戦のゲーム ( No.3 )
名前:Ch 日時:2009/11/19 12:03

arさん、Willさん、返信ありがとうございます。 そのまま全ての弾情報を送るのは現実的ではない、 という事なのですね… 今度はarさんが提案されたような、 弾が発射された時に誰が、何処で、何を撃ったか、 の様な情報を送る形で試してみたいと思います。 その後の処理は受信側で処理を行う、という感じですね。 Willさんの意見も参考にしてみたいと思います。 現状ですと、データが届くのを待つ状態でしたので、 情報の送信負荷に加えて、更に重くなっていたものと思われます。 ですので、設計も含めて、ちょっと考え直してみたいと思います。 詰まってしまったらまた質問をするかと思いますが、 よろしくお願いします。

Page: 1 |