HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0627
ひじきpcbnet2のソケットについて5解決


ひじき

リンク

2010/6/27(Sun) 21:53:26|NO.33469

HSP3.2 + Pcbnet2を使用してオンライン対戦型のSTGを作ろうとしております。
毎フレーム自機の位置と弾の位置などを送受信し、
それをグラフィックに反映させたいのですが、
ホストとクライアントを作り、クライアントがホストに接続した状態で
ホストが「ゲーム開始」を押すとクライアント側もゲームを開始する
というところまでは順調に進み、一応は敵機の位置も受信しているのですが

// 送信側
tcpsend player_x , 0 , 8 , socket tcpsend player_y , 0 , 8 , socket // 受信側 tcprecv enemy_x , 0 , 8 , socket tcprecv enemy_y , 0 , 8 , socket

とやった所、どうやらXとYを逆に受信してしまうことがあるようです。
こういう場合は、送る変数ごとに別々のソケットを用意するべきなのでしょうか?
変数をpackすることも考えましたが、撃たれていない弾の座標は送らないようにしたいため
何とか解決策を探しております。

とはいうものの分かりづらいと思いましたので、
ソースを丸ごとアップロードしておきます。

http://holyweb.dyndns.org/jkstg.zip

をダウンロードして解凍して頂き、ソースをみて原因などを教えて頂ければ幸いです。
「project.hsp」がマスターソースです。宜しくお願いします。

長文、乱文、申し訳ございません。



この記事に返信する


ひじき

リンク

2010/6/27(Sun) 22:23:14|NO.33471

質問内容が定まっておりませんでしたので訂正いたします。
ある変数を受信する際、
送信側での player_x という変数は
受信側での enemy_x という変数に必ず代入する。
といったようなことがしたいです。

よろしくお願い致します。



ORZ

リンク

2010/6/28(Mon) 00:58:50|NO.33476

インターネッツの仕組み上、Aのすぐ後に送ったBが、必ずAより後に到着するという保証はないでごわすよ。
packを用いて必要なデータをまとめて送信した後、unpackを用いて分解すればよろしい。



ORZ

リンク

2010/6/28(Mon) 01:05:55|NO.33477

ごめんねなんかpackしたくないって書いてあったね。
何でpackしたくないのかはその説明じゃ全く分からないけど、撃たれた状態(?)の弾の
座標だけをどっか別の配列変数に書き出して、それをpackしたらよろしい。
ソケット何個も用意するよりよっぽど楽。データが増えたとき何回握手するか考えただけでも恐ろしい



ひじき

リンク

2010/6/28(Mon) 05:20:58|NO.33483

お返事ありがとうございます。
変数ごとにソケットを用意するということが
いかに馬鹿げたことなのかはいろいろ調べて先ほどわかりました。
また、意図した変数に必ずしも代入されるわけではないということも分かりました。
仰る通りpackするのが一番手っ取り早く確実なようです。
ありがとうございました。やはりpack>unpackの方法でこれらを実現したいと思います。



kojiro

リンク

2010/6/28(Mon) 20:20:46|NO.33489

>インターネッツの仕組み上、Aのすぐ後に送ったBが、必ずAより後に到着するという保証はないでごわすよ。
TCPの場合は保証されるんじゃなかったっけ。
でないと大きなファイルを送信できない。



ONION software Copyright 1997-2021(c) All rights reserved.