ネット対戦対応計画 -3- 99/11/07

うーん、なんで通信対戦できないんだ、
というか、データ送信遅すぎだ....、とか思いつつ、
寝た。

翌朝、朝目覚めたら、なぜかキー処理のことを
考えていた。特にリプレー関連。実時間使ってるから、
できそうにないなぁ、とか。

「..ん?」
「キー処理?」
「リプレー?」
「うーん....。」
「あっ」
「いけるかも!!」

そういえば、人間同士の対戦なら
「キー入力情報」さえあれば、動いてくれるんだった。
ということは外部から「このキーは押されてるよ」とやってやれば
それに対応したアクションを繰り出すんだから、
「キー情報さえ送ってやればいい」
ってことだ!!
これならうまくいきそうだ〜。

というわけで、早速挑戦。
昨日、通信対戦対応ができなかったので
消してしまった「DXPlay」コンポーネントを再度張りつけ、
接続ボタンを設置し、早速コードを書き始めた。

「うーん、どういうタイミングでデータを送ろうか...。」
「リアルタイムではいくらデータが小さくても無理みたいだし...。」
「キー入力が更新(変更)されたらでいいか」

手っ取り早くやってしまいたかったため、
あまりよろしくないグローバル変数を追加し、
ぐちゃぐちゃとコードを書き足した。
そして、とりあえずデータを送ってみた。

ここでの処理のおおまかな手順は、次のような感じ。

・Playerを二人用意する
・2Playerは入力装置からの操作をできないように
・なんかボタンが押される
・データを送信する
・データを受け取り、2Playerの方にデータを与える
・データに合わせて、2Playerが動く

ここでいう「2Player」ってのは
いわば「自分の敵」で対戦相手です。
ホストとかそんなものは関係なしに、
2Playerが「データを受信して動く」キャラクタです。

「んじゃ、起動して」
「.......」
「おっ、つながった」
「「二人対戦」モード...と。」
「動いた?」
「いっしょに動いた(^^;)」

やっぱり一度でうまくいくほど甘くはなかった。
でも、データ送信もなかなかの速度だし、あとはほかの問題だ。
「いっしょに動いた」ってのは、自分が動くと、
もう一人のプレーヤまでいっしょに動いてしまうのだ。

なんでかなーと思ったら、
「データがどこから送られてきたか」
を判断していなかった。
どういうことかというと、「自分が使っているコンピュータ」から
データを送るんだけど、このデータはグローバル変数なので、
データを変更しデータを送ったとき、
「自分が使っているコンピュータ」の2Playerが動いてしまうってわけ。


解決方法は、「どこから送られたか」を判断するだけ。
幸い、コンポーネントに「自分のID」を取得できるやつがあったので、
データ送信の時にIDをデータに持たせてやったら、すんなりとうまくいった。

しかし、問題はこっからだった...。

次へ

もどる