複数人での通信でちらついてしまいます

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
pulltab

複数人での通信でちらついてしまいます

#1

投稿記事 by pulltab » 12年前

DXライブラリーを使い複数人で遊べるゲームを作ろうと思い自分なりに試行錯誤しながらプログラムを組んだのですが、
データの受信が正しく行われていないのかキャラクターがちらついてしまいます。

全体のコードを載せてしまうととかなりの量(スパゲッティーな事になっています)になってしまうので原因と思われるコードだけです。
原因と思われるコードは相手の最新のデータで取得できるように次のように書きました。

コード:

//Receiveでプレイヤー全員のデータを取得し、Dataに内容をコピー(Recieve、Dataには座標やモーション等の情報が入っている)
while(CheckNetWorkRecvUDP(UDPHandle)){	//受信できるデータが無くなるまでループ①
	if(NetWorkRecvUDP(UDPHandle,&IP,NULL,&Receive,sizeof(Data),FALSE)<0)break;//何らかのエラーもしくはデータが無くなったらループを抜ける。②
	CopyMemory(&Data,&Receive,sizeof(Data));//最新のデータを代入する③
}
ループし過ぎなのが原因だと思うのですが、これ以外に最新のデータを取得する方法が思いつきません。
リアルタイムさを重視しているので最新のデータを取得できるようにしたいです。

キーの情報を取得する方法も考えましたがパケットをロスト、順序が入れ替わる事や、UDPをTCPにして安定させたとして送受信に時間をかけてしまうのは大丈夫なのかという不安もあり試していません。

拙い文ですが方法等を分かりやすく教えて頂けると幸いです。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 複数人での通信でちらついてしまいます

#2

投稿記事 by softya(ソフト屋) » 12年前

これだけの情報では何とも言えませんし、オンラインゲームで各クライアントアプリのデータの整合性を保つのはプロでも高度な技術に属します。
根本的な設計に問題がある可能性が高いと思いますが、実行通信ログでもない限りどうなっているかは調べられないでしょうし、赤の他人である回答者が限定された情報で短時間に的確に答えられる可能性もとても低いと思われます。

スレッドを使う、直接WinSock2を利用も検討されたほうが良いじゃないでしょうか。あと通信のデバッグ方法を確立するのも急務だと思います。
パケットログなどは確認されていますか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る