タグ付けされた質問 「networking」

情報交換の目的でケーブルバインドまたはワイヤレス通信リンクを介して接続された2台以上のコンピューター。

2
物理学によるマルチプレイヤーネットワーキング
私は、物理学を使用したマルチプレイヤーネットワーキングがレーシングゲームでどのように実装されているのか興味があります。私たちは、異なる人々によって制御される複数の高速移動車両で物理的な世界を持っています。車両には武器があり、互いに射撃できるとしましょう(ツイストメタル、Vigilante v8) ヒットとコリジョンが心配です。権限のあるサーバーまたはより良い代替手段?

3
Node.jsのリアルタイムマルチプレイヤーゲームの設計原則
私は、クライアント/サーバーゲーム内プロトコルの設計と最適化におけるレイテンシ補償方法と呼ばれるYahn Bernierの2001年の論文から改編されたマルチプレイヤーネットワーキングに関する Valveの記事を読んでいます。socket.ioを介してクライアントに接続されたnode.jsサーバーを使用してリアルタイムのマルチプレイヤーゲームを作成していますが、以下に詳述する原則に関していくつか質問があります。 エンティティ補間 [補間]は、サーバーの更新をバッファリングし、それらのギャップをスムーズに補間して再生することにより、これが通常もたらす不安定な動きを防ぎます。また、パケット損失によるグリッチから保護することもできます。 クライアント側の予測 予測とは、サーバーが確認するのを待たずにローカルプレーヤーのアクションの効果をクライアントが予測するという概念です。エンティティの予測状態は、一致または不一致が検出されるまで、サーバーコマンドが到着するたびにサーバーコマンドに対してテストされます。 遅れ補償 ラグ補正は、コマンドが送信されたときにプレーヤーが見たものを見るために、[ユーザー入力]を処理するときにプレーヤーの待ち時間を使用してサーバーが巻き戻し時間を使用するという概念です。遅延補償は、予測と組み合わせることで、ネットワークの遅延を攻撃者の観点からほぼ排除する程度まで抑えるのに役立ちます。 原則はUDPに適用されるようにTCPにも適用されますか?また、実装に違いはありますか?エンティティの内挿はパケット損失から保護する必要はないが、それについてはそれが必要であることがわかります。 UDPとNode.jsを使用して、サーバーとWebブラウザー間で通信することもできますか? このペーパーは10年以上前のものであるため、これらの原則は現在も使用されていますか、または他の技術が登場していますか? どんな助けでも大歓迎です。

1
ネットワーク上でデータ構造の同期を維持する方法は?
環境 私が取り組んでいるゲーム(一種のポイントアンドクリックグラフィックアドベンチャー)では、ゲームの世界で起こるほとんどすべてのことが、次のような構造のアクションマネージャーによって制御されます。 たとえば、オブジェクトを調べた結果、キャラクターに挨拶をさせ、少し歩き、座った場合、次のコードを生成します。 var actionGroup = actionManager.CreateGroup(); actionGroup.Add(new TalkAction("Guybrush", "Hello there!"); actionGroup.Add(new WalkAction("Guybrush", new Vector2(300, 300)); actionGroup.Add(new SetAnimationAction("Guybrush", "Sit")); これにより、新しいアクショングループ(上の画像の行全体)が作成され、マネージャーに追加されます。すべてのグループは並行して実行されますが、各グループ内のアクションはチェーン化され、2番目のグループは最初のグループが終了した後にのみ開始されます。グループ内の最後のアクションが終了すると、グループは破棄されます。 問題 ここで、この情報をネットワーク全体に複製する必要があります。そのため、マルチプレイヤーセッションでは、すべてのプレイヤーが同じものを見ることができます。個々のアクションをシリアル化することは問題ではありません。しかし、私はネットワーキングに関してはまったくの初心者であり、いくつか質問があります。この説明の単純化のために、アクションマネージャーコンポーネントを次のように抽象化できると思います。 var actionManager = new List<List<string>>(); 上記のデータ構造の内容をすべてのプレーヤー間で同期させるにはどうすればよいですか? コアの質問に加えて、私はそれに関連するいくつかの他の懸念も持っています(つまり、上記と同じ問題のすべての可能な影響): 私は、との1(サーバーとクライアントの両方として動作する選手の一人で)サーバ/クライアントアーキテクチャを使用している場合は、クライアント生み出したアクションのグループを、彼はマネージャーに直接追加、または唯一のリクエストを送信する必要がありますサーバーに、順番にすべてのクライアントにそのグループを追加するように指示しますか? パケット損失などはどうですか?ゲームは決定論的ですが、クライアントで実行されるアクションのシーケンスに矛盾があると、世界の一貫性のない状態につながる可能性があると考えています。そのような問題からどのように保護しますか? 一度に追加するアクションが多すぎると、接続に問題が発生しませんか?それを軽減する方法はありますか?

3
ターンベースのボードゲームサーバーの参照?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 6年前に閉鎖されました。 ターンベースゲームサーバーの構築方法について推奨する参考資料/書籍はありますか?チェスプレーヤーをペアリングし、ゲームの状態を保持するチェスサーバーのようなものです。過去には、たとえば、IGS(go、weiqi)はソケットベースの実装です。利用可能な現代の技術は何ですか?ありがとう!

5
ネットワーク層ライブラリ[閉鎖]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 6年前に閉鎖されました。 私は自分のゲームに無料で、またはインディーズゲームの公正な価格で追加できるネットワークレイヤーを探しています。 ネットワークレイヤーとは、インターフェイスをとることができる何らかのライブラリを意味し、メッセージの送受信ができ、すべての低レベルの情報を単独で処理します。 私は特に探しています: ネットワークの輻輳などの複雑なことを理解して処理する高品質のライブラリ。 スケーラブルなライブラリ。これにより、多くのプレイヤーが一緒にプレイできます。 サーバーベースではなく、ピアツーピアソリューションであることが望ましい。 できれば、高レベル言語(JavaやC#など)のバインディングを持つライブラリー。 私が探しているものの例はグラップルですが、利用可能な他のライブラリがあることは知っています。

3
p2pマルチプレーヤーゲームとクライアントサーバーの制限[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 マルチプレイヤーゲームのアーキテクチャについて読んでいます。 これまでのところ、私が見つけたほとんどの記事はクライアントサーバーモデルを扱っています。 p2pアーキテクチャを使用する場合の制限について教えてください。それを使用して実装できるゲームの「クラス」は何ですか(または、より一般的ですか)。どっち?そして、一般的に、クライアントサーバーモデルに対する主な違いと制限は何ですか。

2
クライアント側の予測で移動オブジェクトを補正する方法は?
Star Controlのようなmeleeをサポートするゲームサーバーを実装しています。船を飛ばして射撃し、動きを動かすための超単純な速度/加速/減衰物理学を備えています。 私は、Valve、Gafferon、Gambettaを読み、クライアント予測のためにGambettaのアルゴリズムを実装しました。 クライアント予測は、サーバーからの位置を更新することでプレーヤー船に作用し、サーバーで未処理の入力をプレーヤー船に再適用します。 残念ながら、私のゲームではうまく機能しません。ガンベッタの例では、すでに移動しているオブジェクトや段階的に更新されるコマンドは考慮されていないという事実と関係があると思います。(「ステップ」とは、フレームを意味します)。そのため、私のゲームでは、プレイヤーは(すでに動いている)船を加速するために押し上げます。船はクライアント上で動き続け、コマンドをサーバーに送信し、通常は次のステップでサーバーからワールドスナップショットを受信します。私はもっ​​と何かを得ます: playerコマンドはクライアントのステップ3で実行されますが、サーバーではサーバーのステップ5でのみ実行されます。クライアントのステップ6でクライアントが世界のスナップショットを受信するまでに、特に高速の場合、予測はかなりずれます。 問題の核心は、クライアントがステップ5でコマンドを実行するのに対し、サーバーはステップ6でコマンドを実行することです。コマンドを使用してクライアントステップを送信し、サーバーをロールバックしてクライアントタイムステップを使用してコマンドを再実行することを検討しました。ただし、ロールバック以降に受信したコマンドがどうなるか、送信されたステップを変更することによってクライアントを不正に利用する方法など、他の多くの問題が発生する可能性があります。 このようなGoogleの動画を読んだり見たりすると、別のアプローチが言及されています。このアプローチでは、プレーヤーの位置をスナップショットの位置に合わせて徐々に変更します。 私の質問: Gambettaのアルゴリズムを一定のステップ移動で機能させることができますか?それとも概念的に私のゲームと互換性がないのですか? ステップを徐々に補間するのは正しい方法ですか?もしそうなら、サーバーから受信したばかりのオブジェクトと一致するように、クライアントの位置から既に移動しているオブジェクトをどのように補間しますか? これらの方法、段階的補間、Gambettaのアルゴリズムは連携して機能しますか、それとも相互に排他的ですか?

2
マルチプレイヤーでのジャンプなどのアクションを同期する方法は?
私は初心者のゲーム開発者で、マルチプレイヤーゲームについて研究しています。私は常にある程度の待ち時間があることを観察しました、プレイヤーは常に過去のアクションから更新を取得します。しかし、レイテンシを処理する推測航法のようなテクニックがあります。動きを予測してスムーズに動きます。しかし、ジャンプ、歩行停止などのアクションを同期させるにはどうすればよいでしょうか。 クライアントAが動いていて、100m /秒の速度で10.2時間に100mにいて、この情報を送信したとします。クライアントBはこの情報を少し後で受け取り、10.4にします。クライアントBでは、予測を使用して、クライアントAを120mに配置できます。しかし、クライアントが10.3で110mでジャンプしたとしたらどうでしょう。それを予測することはできません。予測を使用しているため、クライアントAの過去のジャンプを示すことはできません。 ジャンプアクションをまったく送信しないことで、この問題に対処できます。しかし、私のゲームにプレーヤーが転んで死ぬ可能性があるいくつかの空白がある場合はどうでしょうか。したがって、ジャンプアクションを同期しない場合、他のプレーヤーは1人のプレーヤーが走っていることを観察し、その後彼は無効になり、画面に表示されて視覚的なエンゲージメントを破壊します。 ジャンプは単なる例であり、予測が機能しない多くのシナリオがあるかもしれません。だから、どうやってそれらに対処するのですか?そのような例の1つは、Awesomenautsのようなマルチプレイヤーオンラインバトルアリーナゲームです。

3
私の超シンプルなマルチプレイヤーセットアップはおそらく良いアイデアではないことを知っていますが、なぜですか?
単に楽しみのためにシンプルな小さなMOBAを作成しています。私はすべてをシングルプレーヤーにしていたときに、「マルチプレーヤーを追加する必要があるだろう」と気づきました。 私はこれまでネットワーキングで何もしたことがないので、Lidgrenをゲームに統合する方法を学ぶのは楽しくて素晴らしいものでした。問題は、私が行っている方法が間違っていることはよくわかっています。なぜなら、私が知る限り、メインストリームゲームを使用するには十分に堅牢ではないからです。しかし、何が問題になっていますか? 私がやっていることは、基本的に、プレイヤーがアクションを実行するたびに、「ちょっと、これをやっただけだ」というメッセージをサーバーに送信することです。サーバーとクライアントはどちらも同じシミュレーションを実行しています。次に、サーバーは他のすべてのクライアントにメッセージを送信して、その人がそのことをしたことを伝えます。 いくつかの場合を除いて、ほとんどの場合、プレーヤーが何かをするとき、クライアントはそれがクールであると想定し、自分でそれを進めます。したがって、どこかを右クリックしてそこに移動すると、そのプレーヤーのクライアントは彼の男をそこに移動し始め、それを知らせるメッセージをサーバーに送信します。 だから基本的に: プレイヤー1が呪文を唱えると、6秒間100%速く動くようになります プレーヤー1のローカルクライアントがそのバフをユニットオブジェクトに追加します プレーヤー1のクライアントがサーバーに「この呪文を唱えただけだ」というメッセージを送信します。 サーバーは、彼がその呪文を唱えるのに十分なマナを本当に持っていることを確認し、もしそうであれば、そのバフをサーバーのそのUnitオブジェクトのコピーに追加します サーバーは他のすべてのクライアントに「この男はこの呪文を唱えた」というメッセージを送信します 他のすべてのクライアントはメッセージを受信し、「ああ、大丈夫」に進み、そのバフをそのプレーヤーのローカルユニットオブジェクトに追加します ビッグゲームがマルチプレーヤーでどのように機能するかを確認するために、さまざまな情報をざっと調べてきましたが、この機能に手を出し始めたばかりのユーザーを混乱させるようなものですが、Sourceエンジンは、すべての変更を含むパケットを世界のすべてのダニ?繰り返しますが、これはまったく新しいことですが、それほど多くのデータを頻繁にプッシュできますか これが少し乱暴である場合は申し訳ありませんが、基本的には、なぜ私のシンプルなシステムが適切な方法ではないのかと思っていました。

3
Bulletを使用すると、物理がネットワーク上で正しく同期しない
Bulletを使用してクライアント/サーバーの物理システムを実装しようとしていますが、同期をとるのに問題があります。 ゲームオブジェクトから変換を読み書きするカスタムモーション状態を実装しましたが、ローカルで動作しますが、ネットワーク化されたゲームに対して2つの異なるアプローチを試しました。 サーバー上にも存在するクライアント上の動的オブジェクト(たとえば、ランダムな破片やその他の重要ではないもの)は運動学的に作成されます。これは正しく動作しますが、オブジェクトは非常にスムーズに移動しません オブジェクトは両方で動的ですが、オブジェクトが移動したというサーバーからの各メッセージの後に、線形速度と角速度をサーバーからの値に設定し、サーバーのトランスフォームでbtRigidBody :: proceedToTransformを呼び出します。また、btCollisionObject :: activate(true);を呼び出します。オブジェクトを強制的に更新します。 方法2の私の意図は基本的に方法1を行うことでしたが、方法1をスムーズにするために自分で行う代わりにBulletを乗っ取って貧者の予測を行いましたが、これはうまくいかないようです(理由が100%明確ではないため)私は弾丸を踏んでさえいます)そしてオブジェクトは時々異なる場所に行き着きます。 私は正しい方向に向かっていますか?Bulletには独自の補間コードが組み込まれているようです。それは私が方法1をうまく機能させるのに役立ちますか?または、誤って踏みつけているため、方法2のコードが機能していませんか? 編集:私が気付いた方法1のもう1つの問題は、同期されていないオブジェクトに対する衝突の衝突応答が大幅にずれることです。キネティックボディは、ノックバックできないため、時々無限にシュートするものです。

1
ネットワーク統合のため、独自の物理エンジンを作成する必要がありますか?
現在、トップダウンのリアルタイムゾンビシューティングゲームを開発しています。これをJavaでコーディングし、物理エンジンとしてJBox2Dを使用しています。私は今週ネットワークをコーディングしており、現在は物理の同期まで行っています。 私は、サーバーが後でそれを承認する限り、クライアントが自由に移動できる予測クライアント/権限のあるサーバーモデルを使用することを計画しています。これには、クライアントが動きのデータを含むパケットをサーバーに送信し、サーバーが待ち時間を計算し、古い状態から世界を再シミュレーションすることが含まれます。 私の問題は、私の現在の物理エンジンであるJBox2D(基本的にはBox2Dのポート)は、ワールドのロールバックをサポートしておらず、ワールドデータをシリアル化するのがそれほど簡単ではないことです。私には2つの解決策があります。現在の物理エンジンを変更または拡張するか、自分で作成することができます。 自分の物理エンジンを作成する理由- 不要な機能を削除できます。トップダウンゲームでは、衝突のメカニズムと力の処理だけが本当に必要です。重力は関係ありません。 私はコードをよりよく理解でき、ロールバック機能を実装する方が[おそらく]簡単です JBox2Dを拡張/変更する理由 私自身の物理エンジンを書くことは、かなりの量の仕事になるでしょう、それは面倒かもしれません JBox2Dには幅広いサポートコミュニティがあり、開発者と協力することができます JBox2Dには、衝突検出など、特定の最適化があり、便利です これについては既に行われているようにいくつかの作業が行われますが、コードはほとんど共有されていません だからあなたの意見は何ですか。これは私の最初のゲームであり、私はプロのゲーム開発者ではありません。誰かがその領域ですでに行われた作業へのリンクを提供できる場合(できればJBox2D / Box2D / Javaを使用)。

3
マルチプレイヤーリアルタイムAndroidゲームの最適なソリューション[終了]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、ゲーム開発スタック交換のトピックになるようにします。 5年前に閉鎖されました。 私はAndroid(2-8プレイヤー)向けのマルチプレイヤーリアルタイムゲームを作成する予定で、マルチプレイヤー編成に最適なソリューションは次のとおりです。 PCにサーバー、モバイルにクライアントを作成します。すべての通信はサーバーを経由します(ClientA-> PC SERVER-> All Clients) bluetoothを使用します。まだ使用していません。bluetoothでマルチプレーヤーを作成するのが難しいのかわかりません いずれかのデバイスでサーバーを作成し、他のデバイスを接続します(ネットワーク経由ですが、NATを介したデバイスの問題を解決するのが難しいのかどうかはわかりません) 他の解決策?

2
C / C ++マルチプレイヤーゲームのネットワークメッセージをシリアル化およびシリアル化解除する最良の方法は何ですか?
現在JSONを使用しており、クライアントとサーバー間のメッセージの種類によってはバイナリ形式に移行したいと考えています。 構造体をソケットに読み込むだけですか?プロチコールバッファー/リサイクルを使用しますか? データの配列をどのように表すべきですか? データのパック/アンパックのインターフェースはどのように見えるべきですか?

2
XNAおよびXbox 360でのネットワークの可能性は何ですか?
Xbox 360のXNAはネットワーキングへのアクセスが制限されており、他のXbox 360ユニットへのマイクロソフトのプロトコルを介した通信のみを許可すると噂されています。 XNAが提供するネットワークの可能性は何ですか?同じサブネットにXbox 360ユニットをいくつ接続できますか?最大16ですか?Xboxはピアツーピア通信のようにサブネット上の他のXboxにデータを送信できますか?XboxはWindows PCのXNAと通信できますか?通信できる他のデバイスはありますか? そして、ゲームサーバーはどうですか?独自のマルチプレイヤーゲームサーバーをセットアップして、Xboxに接続して自由に通信させることはできますか?ゲームサーバーのコードはどのプラットフォームに記述しますか?Unix上のC ++?一度にいくつのXboxユニットがサーバーに接続できますか?独自のゲームサーバーをセットアップできない場合、インディーズの開発者がゲームサーバーを開発して実行できるようにする非公式の「ハック」はありますか? 私はXbox開発者ではない(つまり、$ 10000開発キットを所有していない)ため、ZoidcomなどのC ++ライブラリを使用できません。

4
TCPとUDPの両方を同時に使用することには意味がありますか?
読んだ後であるUDPをまだ良いTCPよりもデータが重いリアルタイムゲームのため?、TCPとUDPの両方を同時に使用するのは理にかなっているのでしょうか。 まれに送信されるが、確実に到着することが保証されている情報を送信するためのTCP。 スコアの更新、プレーヤーの名前、ゲームの世界でのライトのオン/オフの状態など。 絶えず更新され、時々失われる可能性がある情報を送信するためのUDP。新しい情報が常に送信されるためです。 位置、回転など これは理にかなっていますか?考えられる欠点は何ですか? これを処理するより良い方法はありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.