« 【よみもの】もーりおのつぶやき 第29回 | メイン | HSPTV!メルマガ 第61号 »

2008年06月06日

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

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

「hspsock」を使っての通信対戦を作ってみたんですが、
どうしてもタイムラグが発生します。仕方ないかと思って、
暇つぶしに市販のゲームをやっていると通信対戦があって
遊んでみました。するとタイムラグがなかったのです、
これはなぜなんでしょうか・・・。
ちなみに予測とかは不可能だと思います・・・。

<こたえ>

お便りありがとうございます。
現在のネットワークゲームは、とても高度な技術によって
作られているものが多いのは確かです。が、ほぼすべての
ネットワークゲームの基盤になっているのは、「ソケット」
と呼ばれるTCP/IPネットワークライブラリであり、
その中身は単純にデータの送受信を行なうだけのシンプルな
構造になっています。「hspsock」もまた、「ソケット」の
ライブラリを使用しており、通信のタイミングや速度で
大きな違いがあるわけではありません。
では、市販のネットワークゲームと何が違うのかと言うと、
おそらく効率的にデータを通信する仕組みではないかと
思います。HSPTV!メルマガの第51号でも、ちょっと触れて
いますが、画面の書き換えスピードに対して通信速度が
追いつかない場合がほとんどです。そこで、通信が遅く
なっても、なるべくゲームがスムーズに進行するような
方法を考える必要があります。
予測とかは不可能と書かれていますが、ある程度予測可能な
動作(たとえば操作を何もしない状態が続く場合など)は
通信を行なわないとか、データが到着していない場合は
問題のない範囲でゲームを継続させる工夫を市販のソフトは
行なっています。
「hspsock」の例で言えば、sockget~系の命令でデータを
受け取るのではなく、sockcheck命令でデータの到着を
確認して、到着していない場合は先に進むなどで画面を
止めないようにする必要があります。
また、交換するデータにも送信した時間(またはフレーム)
などを付加して、現在表示中のフレームとうまく同期させる
必要があるでしょう。

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

(おにたま)

投稿者 usuaji : 2008年06月06日 00:28

口臭チェッカー市場