Re: 通信:UDP通信開始の同期をとりたい ( No.1 ) |
- 名前:管理人 日時:2012/02/13 01:45
お久しぶりです
すいません、載せて頂いた情報だけでは「何か重い処理が走っているのかも・・・」くらいにしか推測できません
ゲーム開始から数フレーム相手のデータを受け取れないとのことですが、
子が数フレーム待ては同期は取れて問題解決、というわけではないのでしょうか?
> NetWorkRecvの関数に 30ms近くかかることがあるようです。
> 可能でしたら、非同期に通信処理を行うようにしていただけませんでしょうか?
少し作業が必要なので直ぐに対応というのは難しいです・・・
一応理想的ではないですが定期的に通信処理を行う処理を追加したものをアップしましたので、
よろしければお試しになってみてください m(_ _)m
http://homepage2.nifty.com/natupaji/DxLib/DxLibVCTest.exe // VisualC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibBCCTest.exe // BorlandC++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibGCCTest.exe // Dev-C++ 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibMinGWTest.exe // MinGW 用
http://homepage2.nifty.com/natupaji/DxLib/DxLibMakeTest.exe // ソース
(中身を既存のライブラリのファイルに上書きして、BCCをお使いの
場合は『再構築』を、VCをお使いの場合は『リビルド』を、
Dev-C++をお使いの方は「Rebuild All(Ctrl+F11)」をして下さい)
> また、こちらは特に大きな問題にはなっていませんが、
> 最初に PreparationListenNetWork か MakeUDPSocket を呼ぶと、
> 関数を抜けるまでに 50ms前後経過してしまいます。
通信処理はグラフィックやサウンド程使用される確率が高くないので通信関係の関数が最初に呼ばれた時に
初期化処理を行っています、恐らく 50ms はその初期化処理に因るものだと思います
DxLib_Init の直後に
IPDATA TempIP ;
GetMyIPAddress( &TempIP ) ;
という記述を増やすと、GetMyIPAddress を実行する際に通信関係の初期化が行われますので
PreparationListenNetWork や MakeUDPSocket を呼んだ際の重さは解消できると思います
|
Re: 通信:UDP通信開始の同期をとりたい ( No.2 ) |
- 名前:hiryuh 日時:2012/02/19 08:23
返信遅れてすみません。
対応ありがとうございます!
情報が少なくてすみません。
・非同期版
→UDPの方も対応してくださっていそうだったので、UDPで試してみましたが、
受信、送信の途中で20ms近く待たされてしまうことが頻繁にあります。
→キーフレーム同期を行いたいので、これは致命的です。
→特に急ぎではありませんので、非同期処理にしていただけると嬉しいです。
・TestVerでビルドしたところ
SetEmulation320x240( true );
が効かなくなってしまいました。
この関数を呼ぶと、画面サイズ自体がが320x240にかわってしまいます。
・開始の同期
→管理人さんの仰るとおり最初に相手のデータを受け取るまで待つようにして解決しました。
→ただ、通信処理以外は10ms以上かかるような処理はないはずです。
→あまり調査が進められておらず、これぐらいのことしか言えません。すみません。
→とりあえず問題は解消できたので、この件については「解決」とさせていただきます。
→アドバイスありがとうございました!
|
Re: 通信:UDP通信開始の同期をとりたい ( No.3 ) |
- 名前:管理人 日時:2012/03/11 02:45
すみません、見落としていました
> ・非同期版
> →UDPの方も対応してくださっていそうだったので、UDPで試してみましたが、
> 受信、送信の途中で20ms近く待たされてしまうことが頻繁にあります。
> →キーフレーム同期を行いたいので、これは致命的です。
> →特に急ぎではありませんので、非同期処理にしていただけると嬉しいです。
非同期処理化を予定に入れましたが、かなり先になる可能性がありますので
直接 WinSock を使用した方が良いかもしれません・・・
( 通信関係は他の機能に比べてライブラリでやっていることは多くないので
直接使用する方式にするのは簡単だと思います )
> ・TestVerでビルドしたところ
> SetEmulation320x240( true );
> が効かなくなってしまいました。
> この関数を呼ぶと、画面サイズ自体がが320x240にかわってしまいます。
DirectX9版ではハードウエアレベルで 320x240 という解像度にすることが
できないので、間違ってもモニタに送られる信号が 320x240 になることはないと思うのですが、
画面サイズ自体が320x240になってしまったとは何で判断されたのでしょうか?
|