先日、ベーマガのイベント行ったので色々思い出したけど、そいえば私も大昔はしょーもないゲームを8801で作ったり作りかけたりしてたよな…。
そして思ったんだけど、多分私は今でも取り組めばゼビウスに似たゲーム(背景が上から下に流れてくる中、それに重なって表示される自機は1台で敵の戦闘機を撃ち落とす処理。面白いかどうかは分からんけど)までは作れると思うんだけど、ネット対戦型が分からない…多分テーブルテニスですら無理…。
一般的にゲームって単一スレッドで割り込みなしを前提に単純化すると
1.人間の操作の入力受付
2.弾やら機体やら壁やら画面上の物体の位置の計算
3.物体同士の衝突など判定
4.画面の書き換え
を1/30秒とか1/60秒とかモニタのリフレッシュレート以内に1回行う事を延々繰り返す構造なんだけど、2つのコンピュータを使った対戦だと上記2の所で、物体の位置について合意する処理が入る筈。つまりソケットでの通信が入る。通信のレイテンシが50msecだとするとそれだけで1/20秒、既にタイムリミット過ぎてるやんけ…。
おそらく通信待ってるとカクカクしてしまう筈なので、それぞれのコンピュータがお互い通信終了を待たずに適当に推測で位置を決めて処理を先に進め、後で分った時点で戻すのだと思うけど、そうすると当然ながら物体の位置の食い違いが起きて、衝突の誤判定とか起きるよな…。コンピュータAでは弾を避けたがコンピュータBでは命中しているとか。しかもどちらが正しいとも誤りとも言えないし。敢えて間にもう一台のサーバコンピュータを立ててそのサーバが持つ位置情報を正とするとか?しかも適当に推測で描いた画面を急に戻すと敵がワープしたりしない?とか色々謎が多く魔法の様。
そして思ったんだけど、多分私は今でも取り組めばゼビウスに似たゲーム(背景が上から下に流れてくる中、それに重なって表示される自機は1台で敵の戦闘機を撃ち落とす処理。面白いかどうかは分からんけど)までは作れると思うんだけど、ネット対戦型が分からない…多分テーブルテニスですら無理…。
一般的にゲームって単一スレッドで割り込みなしを前提に単純化すると
1.人間の操作の入力受付
2.弾やら機体やら壁やら画面上の物体の位置の計算
3.物体同士の衝突など判定
4.画面の書き換え
を1/30秒とか1/60秒とかモニタのリフレッシュレート以内に1回行う事を延々繰り返す構造なんだけど、2つのコンピュータを使った対戦だと上記2の所で、物体の位置について合意する処理が入る筈。つまりソケットでの通信が入る。通信のレイテンシが50msecだとするとそれだけで1/20秒、既にタイムリミット過ぎてるやんけ…。
おそらく通信待ってるとカクカクしてしまう筈なので、それぞれのコンピュータがお互い通信終了を待たずに適当に推測で位置を決めて処理を先に進め、後で分った時点で戻すのだと思うけど、そうすると当然ながら物体の位置の食い違いが起きて、衝突の誤判定とか起きるよな…。コンピュータAでは弾を避けたがコンピュータBでは命中しているとか。しかもどちらが正しいとも誤りとも言えないし。敢えて間にもう一台のサーバコンピュータを立ててそのサーバが持つ位置情報を正とするとか?しかも適当に推測で描いた画面を急に戻すと敵がワープしたりしない?とか色々謎が多く魔法の様。
コメント