« 【よみもの】もーりおのつぶやき 第20回 | メイン | 【講座】HSPよく使うフレーズ 第38回 割合の決まった乱数 »

2007年11月02日

【講座】「教えて!おにたま!!」

<和之 さんからのおたより>

前回、hspsockで3人対戦が可能かどうか聞いた"和之"です。
3人対戦より先に、二人対戦を完璧にしようとしてるのですが、
二つのパソコンで性能が違うらしく、「同時対戦」ができません。
性能の悪いほうに合わせて十分なwait(await)をとるしか
ないのでしょうか?

<こたえ>

お便りありがとうございます。
前回に引き続き、通信対戦ゲームについての質問ですね。

「同時対戦」の前にまず、対戦ゲームについて考えてみましょう。
通信しないで対戦する例として、キーボードから2人分の
入力を受け取って、それぞれのプレイヤーを動かすとします。
キーボードの入力は、getkey命令やstick命令などを使って
すぐに取得することができるはずです。
これが通信対戦となるとどうでしょう。相手側のキーボードの
状態をすぐに知ることはできません。相手側の状態を通信で
送ったとしても、届くのは少し後になってしまいます。
同じ建物内でLANに接続されている場合はまだいい方ですが、
インターネット上など離れた場所では、届く時間が保障されて
いません。
このような環境で、確実な「同時対戦」を行ないたい場合には、
通常の対戦とは作り方をまったく変えなければなりません。
await命令などで、1フレームあたり10~20ms単位で画面を
書き換えているとして、その速さで通信データを送り合うことは、
ほぼ不可能です。
多くの通信対戦ゲームでは、もっと遅い単位でデータを送り
あっています。送るデータも、キーボードの状態などではなく、
ゲームの中で変化するもの、たとえばプレイヤーの座標や、
ゲームの状態などになります。さらにスムーズにゲームを見せる
ためには、届いていないデータを補間したり、次の座標を予測
するなどの技術を使う場合もあります。

もちろん、まずはできる範囲から始めればいいと思いますが、
重要なのは通信に余裕を持たせることと、画面の動きと通信は
別に考えてみるといいんじゃないでしょうか。

それでは、またまた。HSPに限らず、PCのコトや
プログラミング関係どんなことでもお便り待っていますね。

(おにたま)

投稿者 usuaji : 2007年11月02日 09:36

口臭チェッカー市場