NetCodeを処理する方法 -- c++ フィールド と architecture フィールド と networking フィールド gamedev 関連 問題

How to handle netcode?


11
vote

問題

日本語

ネットコードがゲームエンジンに「フックする」ことができるさまざまな方法を評価することに興味があります。私は現在マルチプレイヤーゲームをデザインしています、そしてこれまでのところ、私は私が(少なくとも)必要があると判断しました。

私はネットワークゲームを完全にシングルスレッドにする潜在的な方法を持っていました。これは、遮断されていないソケットを使用して、各フレームをレンダリングした後にネットワークをチェックすることです。ただし、フレームをレンダリングするのにかかる時間がネットワークLAGに追加されるまでに最適ではありません。ネットワーク上に到着するメッセージは、現在のフレームレンダリング(およびゲームロジック)が完了するまで待つ必要があります。しかし、少なくともこのようにこのようにゲームプレイはまだ滑らかで、多かれ少なかれ依然として残っているでしょう。

ネットワーキング用の個別のスレッドを有することにより、ゲームはネットワークに完全に応答することができ、例えば、サーバからの状態更新を受信して​​即座にACKパケットを送ることができる。しかし、ゲームコードとネットワークコードの間でコミュニケーションをとるための最良の方法について少し混乱しています。ネットワークスレッドは受信したパケットをキューにプッシュし、ゲームスレッドはそのループ中に適切な時点でキューから読み取られるため、このアップ - 1フレームの遅延を取り除くことはできません。

また、パイプの送信を扱うスレッドを扱うスレッドが、パイプの下にあるパケットをチェックしているパケットをチェックしているものとは別のスレッドが望んでいるようです。着信メッセージがあるかどうかを確認する途中です。 <コード> select などの機能について考えています。

私の質問は、最高のネットワークの責任のためのゲームをデザインするための最良の方法は何ですか?明らかに、クライアントはサーバーにできるだけ早くユーザー入力を送信する必要があるので、ゲームループの両方のイベント処理ループの直後にネット送信コードが入ることができます。これはどんな意味でもありますか?

英語

I'm interested in evaluating the different ways that the netcode can "hook into" a game engine. I am designing a multiplayer game now, and so far I have determined that I need to (at the very least) have a separate thread to handle the network sockets, distinct from the rest of the engine which handles the graphics loop and scripting.

I did have one potential way to make a networked game entirely single-threaded, which is to have it check the network after rendering each frame, using non-blocking sockets. However this is clearly not optimal because the time it takes to render a frame is added to the network lag: Messages arriving over the network must wait until the current frame render (and game logic) completes. But, at least this way the gameplay would still remain smooth, more or less.

Having a separate thread for networking allows the game to be completely responsive to the network, for instance it can send back an ACK packet instantly upon receipt of a state update from the server. But I'm a little confused about the best way to communicate between the game code and the network code. The networking thread will push the received packet to a queue, and the game thread will read from the queue at the appropriate time during its loop, so we haven't gotten rid of this up-to-one-frame delay.

Also, it seems like I would want the thread which handles the sending of packets to be separate from the one that is checking for packets coming down the pipe, because it wouldn't be able to send one off while it is in the middle of checking if there are incoming messages. I am thinking about the functionality of select or similar.

I guess my question is, what's the best way to design the game for the best network responsiveness? Clearly the client should send user input as soon as possible to the server, so I could have net-send code come immediately after the event processing loop, both inside of the game loop. Does this make any sense?

</div
        

回答リスト

14
 
vote
vote
ベストアンサー
 

応答性を無視します。 LANでは、pingはわずかです。インターネットでは、60~100msの往復は祝福です。 &gtのスパイクを得ないという遅れの神を祈ります。 3K。あなたのソフトウェアは、これが問題になるために非常に少数の更新/秒で実行する必要があります。 25のアップデート/秒の間撮影した場合、パケットを受け取って行動すると最大40msの最大時間があります。そしてそれがシングルスレッドケースです...

柔軟性と正確さのためにシステムを設計します。ネットワークサブシステムをゲームコードにフックする方法について説明します。多くの問題に対する解決策は「メッセージング」にすることができます。私は研究室ラットで癌を治療したと思います。 Messagingは私の自動車保険に$ 200以上を節約します。しかし、真剣に、メッセージングは​​おそらく2つの独立したサブシステムを維持しながらゲームコードに任意のサブシステムを添付する最善の方法です。

ネットワークサブシステムとゲームエンジン間の通信、および任意の2つのサブシステム間のその問題について、メッセージングを使用します。サブシステム間のメッセージングは​​、STD :: Listを使用してポインタによって渡されたデータのBLOBとしてシンプルになる可能性があります。

は、ネットワークサブシステム内の発信メッセージキューとゲームエンジンへの参照を単に持っています。ゲームは発信キューに送信されたいメッセージをダンプでき、それらが自動的に送信される、または「flushmessages()」のようないくつかの機能が呼び出される場合には、またはおそらくそれらを送信することができます。ゲームエンジンに1つの大きくて共有メッセージ待ち行列が1つあり、メッセージを送信する必要があるすべてのサブシステム(ロジック、AI、Physics、Networkなど)はすべてのメッセージをすべて読み込むことができます。それに応じて作用します。

他のスレッド上のソケットを実行することは必須ではありません。この設計に関する唯一の問題は、一般に非同期であることです(パケットが送信されているときに正確にはわかりません)、そしてそれをデバッグすることを困難にし、タイミング関連の問題をランダムに表示させることができます。それでも、正しく行われた場合、どちらも問題になるはずです。

より高いレベルから、ゲームエンジン自体から個別のネットワークを言うと言っています。ゲームエンジンはソケットやバッファを気にしない、それはイベントを気にかけています。イベントは、「Player Xは撮影した」などのものです。「ゲームTの爆発は起こった」。これらはゲームエンジンによって直接解釈することができます。 (スクリプト、クライアントのアクション、AIプレーヤーなど)から生成される場所は関係ありません。

ネットワークサブシステムをイベントを送受信する手段として扱う場合は、ソケットでRECV()を呼び出すだけでいくつかの利点があります。

たとえば、50個の小さなメッセージ(長さが1~32バイト)を取ってネットワークサブシステムを1つの大きなパケットにパッケージ化させて送信することができます。多分それはそれが大きな取引だったかどうかを送る前にそれらを圧迫することができます。もう一方の端で、コードは、ゲームエンジンが読み取るために、大きなパケットを再び50個の離散イベントに解凍/解除することができます。これはすべて透過的に発生する可能性があります。

その他のクールなことには、シングルプレイヤーゲームモードが含まれています。シングルプレイヤーゲームモードは、シングルプレイヤーゲームモードを含み、シングルプレイヤーゲームモードは、シングルクライアントと同じマシン上で実行されている純粋なサーバーを共有メモリスペースで通信します。次に、シングルプレイヤーゲームが正しく動作している場合は、リモートクライアント(すなわちTRUEマルチプレイヤー)も動作します。さらに、シングルプレイヤーゲームが正しく、または完全に間違っているため、クライアントがどのデータが必要かどうかを早く検討することを強制します。 MixとMatch、Serverを実行し、マルチプレイヤーゲームのクライアントになります - それはすべて簡単に機能します。

 

Ignore responsiveness. On a LAN, ping is insignificant. On the internet, 60-100ms round-trip is a blessing. Pray to the lag gods that you don't get spikes of > 3K. Your software would have to run at very low number of updates/sec for this to be a problem. If you shoot for 25 updates/sec, then you've got 40ms max time between when you receive a packet and act on it. And that is the single-threaded case...

Design your system for flexibility and correctness. Here is my idea on how to hook a network subsystem into game code: Messaging. The solution to a lot of problems can be "messaging". I think messaging cured cancer in lab rats once. Messaging saves me $200 or more on my car insurance. But seriously, messaging is probably the best way to attach any subsystem to game code while still maintaining two independent subsystems.

Use messaging for any communication between the network subsystem and game engine, and for that matter between any two subsystems. Inter-subsystem messaging can be a simple as a blob of data passed by pointer using std::list.

Simply have an outgoing messages queue and a reference to the game engine in the network subsystem. The game can dump messages it wants sent into the outgoing queue and have them automagically sent, or perhaps when some function like "flushMessages()" is called. If the game engine had one large, shared message queue, then all subsystems that needed to send messages (logic, AI, physics, network, etc.) can all dump messages into it where the main game loop can then read all of the messages and then act accordingly.

I would say that running the sockets on another thread is fine, though not required. The only problem with this design is that it is generally asynchronous (you don't know precisely when the packets are being sent) and that can make it hard to debug and making timing related issues appear/disappear randomly. Still, if done properly, neither of these should be a problem.

From a higher level, I'd say separate networking from the game engine itself. The game engine doesn't care about sockets or buffers, it cares about events. Events are things such as "Player X fired a shot" "An explosion at game T happened". These can be interpreted by the game engine directly. Where they are generated from (a script, a client's action, an AI player, etc) doesn't matter.

If you treat your network subsystem as a means of sending/receiving events, then you get a number of advantages over just calling recv() on a socket.

You could optimize bandwidth, for example, by taking 50 small messages (1-32 bytes in length) and have the network subsystem package them into one large packet and send it. Maybe it could compress them before sending if that was a big deal. On the other end, the code could uncompress/unpackage the large packet into 50 discrete events again for the game engine to read. This can all happen transparently.

Other cool things include single player game mode that reuses your network code by having a pure client + a pure server running on the same machine communicating via messaging in shared memory space. Then, if your single player game operates properly, a remote client (i.e. true multiplayer) would operate as well. Additionally, it forces you to consider ahead of time what data is needed by the client since your single player game would either look right or be totally wrong. Mix and match, run a server AND be a client in a multiplayer game -- it all works just as easily.

</div
 
 
         
         
4
 
vote

私は(最低では)ネットワークソケットを処理するための別のスレッドを持っている必要があります

いいえあなたはしません。

私はネットワークゲームを完全にシングルスレッドにする潜在的な方法を持っていました。これは、遮断されていないソケットを使用して、各フレームをレンダリングした後にネットワークをチェックすることです。ただし、フレームをレンダリングするのにかかる時間がネットワークLAGに追加されるまでに最適ではありません。

必ずしも重要ではありません。あなたのロジックはいつ更新されますか?まだ何もできない場合は、ネットワークからデータを取得することが少ないです。同様に、まだ言うことがない場合は、応答が少ない。

例えば、サーバからの状態更新を受信したら、即座にACKパケットを送り返せることができます。

あなたのゲームが非常に速いペースであるならば、次のフレームがレンダリングされるのを待っていることは大きな遅れであるので、それはあなたが別々のACKパケットを送信する必要がない十分なデータを送信するでしょう - 内部のACK値を含めるあなたがまったく必要な場合は、通常のデータペイロード。

ほとんどのネットワークゲームでは、このようなゲームループを持つことは完全に可能です。

<事前> <コード> while 1: read_network_messages() read_local_input() update_world() send_network_updates() render_world()

レンダリングからのアップデートを切り離すことができますが、それはあなたが特定の必要性を持たない限り、他のすべてが単純にそれほど多くのことを維持することができます。まさにあなたはどのようなゲームを作っていますか?

 

I need to (at the very least) have a separate thread to handle the network sockets

No you don't.

I did have one potential way to make a networked game entirely single-threaded, which is to have it check the network after rendering each frame, using non-blocking sockets. However this is clearly not optimal because the time it takes to render a frame is added to the network lag:

Doesn't necessarily matter. When does your logic update? There's little point getting data off the network if you can't do anything with it yet. Similarly there's little point responding if you have nothing to say yet.

for instance it can send back an ACK packet instantly upon receipt of a state update from the server.

If your game is so fast-paced that waiting for the next frame to be rendered is a significant delay, then it's going to be sending enough data that you don't need to send separate ACK packets - just include ACK values inside your normal data payloads, if you need them at all.

For most networked games, it's perfectly possible to have a game loop like this:

while 1:     read_network_messages()     read_local_input()     update_world()     send_network_updates()     render_world() 

You can decouple updates from rendering, which is highly recommended, but everything else can pretty much stay that simple unless you have a specific need. Exactly what kind of game are you making?

</div
 
 
   
   
2
 
vote

しかしこれは明らかに最適ではありません Aをレンダリングするのにかかる時間から フレームがネットワークラグに追加されます。 ネットワーク上に到着したメッセージ 現在のフレームまで待たなければならない レンダリング(およびゲームロジック)は完了します。

それはまったく真実ではありません。メッセージはネットワークを越えて送信され、受信側は現在のフレームをレンダリングします。ネットワークラグは、クライアント側の整数のフレーム数にクランプされています。はい - しかし、クライアントがこれが大したことであるという数のFPSがある場合は、大きな問題があります。

 

However this is clearly not optimal because the time it takes to render a frame is added to the network lag: Messages arriving over the network must wait until the current frame render (and game logic) completes.

That's not true at all. The message goes over the network while the receiver renders the current frame. The network lag is clamped to a whole number of frames on the client side; yes- but if the client has so few FPS that this is a big deal, then they have bigger problems.

</div
 
 
0
 
vote

ネットワーク通信をバッチ処理する必要があります。あなたは各ゲームダニを送った単一のパケットのために努力しなければなりません(フレームがレンダリングされているときは多くの場合、実際には独立しているはずです)。

あなたのゲームエンティティはネットワークサブシステム(NSS)と話をします。 NSSはメッセージ、ACKSなどをバッチして、最適なサイズのUDPパケット(通常は1500バイト)を送信します。 NSSは、単一のUDPパケットのみを送信しながら、パケット、チャネル、優先順位、再送信などをエミュレートします。

Enet はGlenn Fiedlerのアイデアの多くを実装しています。

またはあなたのゲームがけいれん反応を必要としない場合はTCPを使うことができます。その後、すべてのバッチ処理、再送信、およびACKの問題が解決されます。あなたはまだNSSが帯域幅とチャネルを管理したいです。

 

Network communications should be batched. You should strive for a single packet sent each game tick (which is often when a frame is rendered but really should be independent).

Your game entities talk with the network subsystem (NSS). The NSS batches up messages, ACKs, etc and sends a few (hopefully one) optimally sized UDP packets (~1500 bytes usually). The NSS emulates packets, channels, priorities, resend, etc while only sending single UDP packets.

Read through the gaffer on games' tutorial or just use ENet which implements many of Glenn Fiedler's ideas.

Or you can just use TCP if your game doesn't need twitch reactions. Then all the batching, resends, and ACK problems go away. You'd still want an NSS to manage bandwidth and channels, however.

</div
 
 
0
 
vote

は完全に「反応性を無視しない」。 すでに遅延されたパケットにさらに40msの待ち時間を加えることからゲインすることはほとんどありません。 1つのフレームを追加している場合(60fpsで)、あなたは位置の処理を遅らせて、さらにいくつかのフレームを更新します。それは迅速にパケットを受け入れてすばやく処理することをお勧めしますので、シミュレーションの精度を向上させます。

画面に表示されるものを表すのに必要な最小状態情報について考えることで、帯域幅を最適化しました。それからデータの各ビットを見て、それのためにモデルを選択します。位置情報は時間の経過とともにデルタ値として表すことができます。あなたはこれのためにあなた自身の統計モデルを使うことができ、彼らをデバッグする年齢を過ごすことも、あなたがあなたを助けるためにライブラリを使うことができます。このライブラリーの浮動小数点モデルを使用するのが好きです。 ゲームシーングラフに使用される帯域幅を最適化することは本当に簡単になります。

 

Don't completely "ignore responsiveness". There is little to gain from adding another 40ms latency to already delayed packets. If you're adding a couple of frames (at 60fps) then you're delaying the processing of a position update another couple of frames. It is better to accept packets quickly and process them quickly so you're improving the accuracy of the simulation.

I've had great success optimising bandwidth by thinking about the minimum state information needed to represent what is visible on the screen. Then looking at each bit of data and choosing a model for it. Position information can be expressed as delta values over time. You can either use your own statistical models for this and spend ages debugging them, or you can use a library to help you out. I prefer to use this library's floating point model DataBlock_Predict_Float It makes it really easy to optimise the bandwidth used for the game scene graph.

</div
 
 

関連する質問

12  ターンベースのボードゲームサーバーの参照? [閉まっている]  ( Turn based board game server references ) 
閉鎖。この質問は意見ベースです。現在答えを受け付けていません。 この質問を改善したいですか? ...

-1  TCP接続を介したゲーム情報の直列化  ( Serializing game information over tcp connection ) 
TCPソケット付きのC ++ゲームサーバーを使用してUnityクライアントを書き込もうとしています。私がクライアントとサーバーを備えてゲームデータを送っているとき、それを両端で逆シリアル化することができる場所でそれを直列化したいのです。 はこれに適しているか...

1  シンプルタンクゲーム - クライアント - サーバ通信アプローチ疑問[閉]  ( Simple tanks game client server communication approach doubts ) 
閉鎖。この質問はもっと焦点を絞ったにする必要があります。現在答えを受け付けていません。 この質問を改善したいですか?この記事の...

1  Windowsストア用の構築時にUnity Networkingライブラリが失敗するのはなぜですか?  ( Why do unity networking libraries fail when building for the windows store ) 
lidgren とRSAを使用していますが、物事IPAddressのように、Windows Store用の構築を試してみると、「存在しない」です。 RSAクラスは機能しません。 これはなぜですか?どのように私はまだWindows Storeでネットワークゲ...

0  Netty:サーバーからクライアントを切断すると、自動的に再接続し続けます  ( Netty disconnect client from server keeps reconnecting automatically ) 
Netty APIを使用してサーバーに接続するゲームを持っています。 [ログイン]をクリックしたときに正しく機能します。サーバーに接続します。ただし、私はインゲームボタンを「ロビーに戻す」を追加しました。このボタンはすべてChannel.Disconnect...

0  マルチプレイヤーエアホッケーをよりよくする方法は?  ( How to make my multiplayer air hockey better ) 
私は単純なマルチプレイヤーのウェブゲームを作りましたが、それがどのように機能するかが嫌いです。 これは私が持っているものを示すビデオ例(85 AVG Pingでキャプチャしました)です。 私が使用したもの: スーパーナイーブクライアント予測 - 和解がない...

58  TCPプロトコルは、リアルタイムのマルチプレイヤーゲームに十分なほど良好ですか?  ( Is the tcp protocol good enough for real time multiplayer games ) 
Dialup / ISDN / SLOW Broadbandを介したTCP接続は、単一のドロップパケットがResyncをもたらしたため、途切れのあるゲームをもたらしました。これは、多くのゲーム開発者がUDPの上に独自の信頼性層を実装しなければならなかったか、...

1  ライブラリのようなライブラリ、しかしTCPのためのものですか? [閉まっている]  ( Library like enet but for tcp ) 
閉じたこの質問はオフトピックです。現在答えを受け付けていません。 この質問を改善したいですか? ...

5  クライアント内挿による予測応答性を失うのを避けるにはどうすればよいですか?  ( How do i avoid losing prediction responsiveness due to client interpolation ) 
私のオンラインゲームでは、ネットワーク接続を介した答えを錯覚するためにクライアント予測とクライアント補間を使用しています。 クライアント予測は、サーバーによって着用されていない入力を着信サーバーの状態に適用します。入力が確認されている場合、クライアントのエン...

-2  マルチプレイヤーゲームにおける移動とシミュレーションに関するリソース[閉じた]  ( Resources about movement and simulation in multiplayer games ) 
ここで尋ねられていることを知るのは難しいです。この問題はあいまい、曖昧で、不完全で、過度に広く、または修辞的であり、現在の形で合理的に回答することはできません。再開できるようにこの質問を...

20  マルチプレイヤーゲームを確実にNATの背後に作る方法は?  ( How to make a multiplayer game work reliably behind nat ) 
クライアントがNATの背後にあるときに、100%クライアント/サーバーであるゲームでさえも問題が発生することがあります。 Peee-Peerゲームはさらに大きな問題です。一部のゲーム(UDPやTCPなど)または複数の接続(音声用の異なるUDPポートなど)を使用...

2  ネットワークC ++を介した構造化データを渡すための例/チュートリアル  ( Example tutorial of passing structured data over network c ) 
これは非常に一般的な質問です。私がネットワーク経由で送ることができるように、私のゲームワールドの状態(プレーヤー、発射体などのポジション/向きなど)に関する同じ情報をデータストリームに保存する方法についての戦略について。画面に描画するには、クライアント側でそれ...

8  フラッシュゲームでのネットワーク。ソケットまたはストラス?  ( Networking in flash games socket or stratus ) 
ネットワーク通信を使用するフラッシュゲームのプロトタイプの作業。それはマルチプレイヤーゲームになるので、ピア2ピア接続を使用する方が良いでしょう。 誰かが Stratus または組み込みソケットを介してマルチプレイヤーゲームを作成しようとしましたか? ゲーム...

4  Javaマルチプレイヤーカードゲーム  ( Java multiplayer cards game ) 
シンプルなマルチプレイヤーカードゲームを開発する必要があります。たとえば、ポーカーゲームです。これは勉強のためだけです。私はそれをJavaで開発するつもりです。 サーバーとクライアント間の通信を管理する方法このゲームにソケットを使うことはできますか? 編集:あ...

0  HTTPデバッガからクライアントサーバー通信を非表示にします  ( Hide client server communication from http debuggers ) 
ほとんどオフラインのゲームを開発しています。ただし、次のためにサーバーと通信します。 データを収集し、統計目的(YUP、プレーヤーに通知され、オプトアウトすることができます)。 毎日の贈り物、イベントなどのためのリソースをトリガーして生成する... 問題...

1  ネットワーキングのクラス構造をどのように整理しますか?  ( How do i organize my class structure for networking ) 
私のGameClientには、次のクラス(コンプネント)があります。 ゲーム、ゲームスクリーン、GameWorld、プレーヤー。 彼らはこのように構造化されています: ゲームには2つのゲームがあります:メニューとメインスクリーン。 メニューエンはGameWor...

8  ハッキングサーバーがマスターサーバーのスプーフィンを防ぐのを防ぐ方法  ( How to prevent a hacked server from spoofing a master server ) 
プレイヤーが一致し、ホストとして役立つ可能性がある部屋ベースの多層ゲームモデルをセットアップしたい(すなわち、信頼できる権限のあるサーバ)。プレーヤーのアイテム、ランク、現金、EXPなどを追跡するマスターサーバーをホストしたい そのようなモデルでは、無効な一致...

3  マルチプレイヤーサーバーを作成するには、ローカルシングルプレーヤーにも適していますか?  ( How do i create a multiplayer server also suitable for local single player ) 
C ++、OpenGL、SFMLでボクセルゲームを作成しました。をマルチプレイヤーにしたいです。 Minecraftのクライアントサーバーモデルと似ています。シングルプレイヤーは、その下にある隠しサーバーへのクライアントだけです。しかし、シングルプレイヤー...

11  ネットワーキングPongクローン  ( Networking pong clone ) 
TCPソケット、UDPコミュニケーションなどの基礎を持っていますが、リアルタイムのゲーム環境にどのように適用するかについては多くがありません。 私は4人のプレイヤーを持つPong Cloneを持っており、3人のクライアントとサーバーの間のパドル位置を同期させ...

1  あなたは本当にネットワーク上で物理を同期させる必要がありますか?  ( Do you really have to sync physics over the network ) 
キャラクターが弾丸を撃つことができる2Dゲームを作成したいとしましょう。クライアントとサーバー上で同じコードが実行されている(JavaScriptで、まったく同じコードです)。 クライアントとサーバーが同じティックXで同じ箇条書きインスタンスを作成した場合、同...

4  サーバーサイドプッシュのためのLightwightクロスブラウザライブラリ?  ( Lightwight cross browser library for server side push ) 
私は、サーバーが確実かつ定期的に更新情報をクライアントにプッシュすることを可能にする軽量のJavaScriptライブラリを探しています。私達は300msの固定ターンタイムを使い、しばしば約20バイトの変更しかない。そのため、XMLHTTPRequestを使用し...

7  RTSのための適切なネットワーキングアプローチ/プラットフォームの選択に役立つ  ( Need help choosing the right networking approach platform for an rts ) 
オンライン2D RTSのようなゲームを作ることについてしばらく考えています。 (マッチの2-6プレイヤー、最大50~60台、AIはありません)。ここでの重要なことは、私がブラウザでゲームを再生可能にすることをお勧めしますので、TCPソケットを使用してFlash...

2  3Dブラウザベースのマルチプレイヤーオンラインゲームのためにどのような使用がありますか?  ( What use for a 3d browser based multiplayer online game ) 
このプロジェクトの正しいツールを選択するのに役立ちますか?それは3Dブラウザベースのマルチプレイヤーオンライン格闘ゲームです。位置決めにはいくつかの3D関数が必要ですが、激しいレンダリングは発生しません。それは非常に動的になるので、それは非常に低いping率が...

0  ネットワーキングとタイミングの問題  ( Networking and timing issue ) 
UNETのために低レベルのAPIを使用しようとしていて、この問題の焦点はこれです。<コード> NetworkEventType recData = NetworkTransport.Receive(out recHostId, out connectionI...

0  XNAマルチプレイヤーが間違っていた  ( Xna multiplayer gone wrong ) 
私は私のXNAプラットフォームゲームに多人数を追加しようとしていて、誤って失敗したばかりです。 私の方法の背後にあるアイデアは、クライアントがサーバーがどのチェックインしているかを知っており、サーバーとバックに到達するのにかかる期間を知っています。入力がどのく...

関連する質問

12  ターンベースのボードゲームサーバーの参照? [閉まっている] 
-1  TCP接続を介したゲーム情報の直列化 
1  シンプルタンクゲーム - クライアント - サーバ通信アプローチ疑問[閉] 
1  Windowsストア用の構築時にUnity Networkingライブラリが失敗するのはなぜですか? 
0  Netty:サーバーからクライアントを切断すると、自動的に再接続し続けます 
0  マルチプレイヤーエアホッケーをよりよくする方法は? 
58  TCPプロトコルは、リアルタイムのマルチプレイヤーゲームに十分なほど良好ですか? 
1  ライブラリのようなライブラリ、しかしTCPのためのものですか? [閉まっている] 
5  クライアント内挿による予測応答性を失うのを避けるにはどうすればよいですか? 
-2  マルチプレイヤーゲームにおける移動とシミュレーションに関するリソース[閉じた] 
20  マルチプレイヤーゲームを確実にNATの背後に作る方法は? 
2  ネットワークC ++を介した構造化データを渡すための例/チュートリアル 
8  フラッシュゲームでのネットワーク。ソケットまたはストラス? 
4  Javaマルチプレイヤーカードゲーム 
0  HTTPデバッガからクライアントサーバー通信を非表示にします 
1  ネットワーキングのクラス構造をどのように整理しますか? 
8  ハッキングサーバーがマスターサーバーのスプーフィンを防ぐのを防ぐ方法 
3  マルチプレイヤーサーバーを作成するには、ローカルシングルプレーヤーにも適していますか? 
11  ネットワーキングPongクローン 
1  あなたは本当にネットワーク上で物理を同期させる必要がありますか? 
4  サーバーサイドプッシュのためのLightwightクロスブラウザライブラリ? 
7  RTSのための適切なネットワーキングアプローチ/プラットフォームの選択に役立つ 
2  3Dブラウザベースのマルチプレイヤーオンラインゲームのためにどのような使用がありますか? 
0  ネットワーキングとタイミングの問題 
0  XNAマルチプレイヤーが間違っていた