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

複数のプレイヤーが協力的または競争的に、ローカルまたはリモートでプレイします。

1
マルチプレイヤーHTML5、Node.js、Socket.IO [終了]
閉じた。この質問には、詳細または明確さが必要です。現在、回答を受け付けていません。 この質問を改善したいですか?詳細を追加し、この投稿を編集して問題を明確にします。 5年前に閉鎖されました。 HTML5 Canvas、JavaScript(John Resig simple Inheritanceライブラリを使用しすぎます)、およびSocket.IOを使用したNode.jsを使用して、シンプルなマルチプレーヤーを作成しようとしています。私のクライアントコード: var canvas = document.getElementById( 'game'); var context = canvas.getContext( '2d'); var socket = new io.Socket( '127.0.0.1'、{port:8080}); var player = null; var UP = 'UP'、 LEFT = 'LEFT'、 DOWN = 'DOWN'、 RIGHT = 'RIGHT'; socket.connect(); socket.on( 'connect'、function(){socket.send(); console.log( 'Connected!'); player = new Player(50、50); …

3
リアルタイムマルチプレイヤープラットフォーマーゲームの作成には何が関係しますか?
ネットワーク/インターネットを介して作業したい「協力」機能を備えたプラットフォーマーゲームを作成しています。 今、私はすべてのプログラマーがゲームネットワーキングについて知っておくべきことなどの記事を含むネットワークゲームプログラミングを読み上げたので、ピアツーピアロックステップとサーバークライアント予測アーキテクチャのようなテクニックの違いを理解しています: インターネット上でプレイされるリアルタイムゲームでは、ピアツーピアロックステップは単にオプションではないと結論付けました。 また、プラットフォーマーにとっても、単純なクライアントサーバーアーキテクチャ(何らかのクライアント予測のない)でも、サーバーへのラウンドトリップによって引き起こされるアクションとリアクションの間の遅延により、ゲームプレイが低下することを心配しています。(私は中央サーバーの必要性を排除したいと言ったので、プレーヤーの1人、クライアントだけが実際にこの遅れを経験します)。 これはクライアントの予測を残しますが、プラットフォーマーのような単純なゲームでさえ、これはまだかなり複雑に聞こえます。 マルチプレイヤープラットフォーマーゲーム用の有効なクライアント予測システムを作成するにはどうすればよいですか?

4
開発の後半の段階で、ネットワークコードをどのように記述できますか?
私は現在、ゲームの作成の初期段階にあり、最終的にはほとんどの面で改善したいと思っています。 ネットワークコードの作成をスキップして、かなり簡単に実装したまま、つまり追加するだけでゲーム全体を書き直す必要がないようにするにはどうすればよいですか。 何を覚えておく必要がありますか? 物理学/衝突検出、ゲームロジック、データタイプ、アニメーション/レンダリングを互いに分離するコンポーネントパターンがあります。 ネットワークコードがまだ実装されていないクライアントとサーバーを作成して、ローカルでテストする方法を教えてください。 クライアントで何をすべきか、サーバーで何をすべきか?ネットワークコードが終了し、サーバーとクライアント間でメッセージを送信し、遅延などがない場合でもアカウントにメッセージを送信するふりをする必要がありますか? 編集:トップダウンRPGになる予定です。友人のためにサーバーをホストするシンプルなマルチプレイヤーは私が考えていることです。それでも、「サーバーは常に正しい」というアプローチにしたいと思います。 編集2:私は私の心のセットがどうあるべきかについてのいくつかのポインタを探していると思います。すべてのエフェクト/変更を即座に適用するのではなく、キーボード入力やアニメーションなどをどのように処理すればよいですか。うーん、私は結局のところどこかに行く前にネットワークについて適切に読む必要があるかもしれません。

2
ネットワーク化されたリアルタイムゲームにゲーム状態のスナップショットシステムをどのように実装しますか?
ネットワーククラスのプロジェクトとして、シンプルなクライアントサーバーリアルタイムマルチプレイヤーゲームを作成したいと思います。 リアルタイムのマルチプレイヤーネットワークモデルについて多くのことを読んでおり、クライアントとサーバーの関係と遅延補償のテクニックを理解しています。 私がしたいことは、Quake 3ネットワークモデルに似たものです。基本的に、サーバーはゲーム全体の状態のスナップショットを保存します。クライアントから入力を受け取ると、サーバーは変更を反映した新しいスナップショットを作成します。次に、新しいスナップショットと最後のスナップショットの差を計算し、それらを同期するためにそれらをクライアントに送信します。 このアプローチは本当に堅実に思えます-クライアントとサーバーが安定した接続を持っている場合、それらを同期させるために必要最小限のデータのみが送信されます。クライアントの同期が外れると、完全なスナップショットも要求できます。 ただし、スナップショットシステムを実装する良い方法を見つけることはできません。シングルプレイヤープログラミングアーキテクチャから離れて、ゲームの状態を次のように保存する方法を考えるのは本当に難しいと思います。 すべてのデータはロジックから分離されています ゲームの状態のスナップショット間の差を計算できます ゲームエンティティはコードを使用して簡単に操作できます スナップショットクラスはどのように実装されますか?エンティティとそのデータはどのように保存されますか?すべてのクライアントエンティティには、サーバー上のIDと一致するIDがありますか? スナップショットの違いはどのように計算されますか? 一般的に:ゲーム状態のスナップショットシステムはどのように実装されますか?


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

3
JavaScriptでマルチプレイヤーを処理する方法は?
私は、モバイルマルチプレイヤーゲームに使用する技術について少し研究しています。 これは現在のところ実験であるため、現時点では、プレーヤーが注意する必要があるのは他のプレーヤーだけです。 これがゲームではなく典型的なWebアプリケーションである場合、常にHTTPリクエストが発生するだけです。しかし、これはゲームであるため、パフォーマンスと精度が問題になります。 ゲームは複数の電話プラットフォームを対象としているため、クライアントはJavaScriptまたはJavaScriptベースのフレームワークで記述されるとしましょう。サーバー技術は完全にオープンです。 各プレーヤーは、HTTPポストと同等のものを作成し、より高速なプロトコルのみを使用する必要があります。マルチプレイヤーがWebベースである理由は、Bluetoothまたは他のローカルネットワークを介したマルチプレイヤーがプラットフォーム間で多様すぎて問題を引き起こす可能性があるためです。 それでは、質問は、JavaScriptマルチプレイヤーに使用するのに適したプロトコル/テクノロジーとは何でしょうか?サーバー側のものに関するアドバイスやそれは重要ですか?この2層アーキテクチャを削除して、電話と電話を直接接続する必要がある理由は何ですか?

4
リアルタイムマルチプレイヤーゲームに使用するデータベース(RDBMS対NoSQL対BOTH)
データベースを必要とするリアルタイムのマルチプレイヤーゲームに取り組んでいます(プレイヤープロファイル、フレンド、ロック解除、ニュースなどの機能用)。これは標準のPCゲーム(ブラウザベースではない)であり、クライアントサーバーを使用します。建築。私はデータベースを使用するのが初めてであり、過去数日間、白熱した議論につまずいたとき、RDBMS対NoSQLのいくつかの研究を行ってきました。現在、私はNoSQLに傾いていますが、それぞれの使用法(RDBMSとNoSQL)を読んだ後、両方を使用したいと思っています。それは奇妙に思えるかもしれませんが、私の状況を説明させてください。 私のチームは、無制限のmySQLストレージと帯域幅を提供する共有Webホスティングパッケージを持っていますが、唯一の注意点は、一度に25の接続しか開けないことです(共有ホスティングルール)。ニュースの更新を投稿したり、コミュニティ機能(コメント、ファンアートのアップロードなど)をサポートしたりするために、これを自分のWebサイト(間違いなく通常の使用方法)で使用するつもりです。それはすべて大丈夫です-しかし!これは物事が面白くなるところです...私はゲーム内で私のウェブサイトに投稿されたこの同じ情報を表示したいです。これは、Webサイトとゲームの両方でmySQLを使用することを意味します。ニュースの投稿などに加えて、ゲーム内でチャットやサーバーリストなどに使用する予定です。私はその25接続ルールについてほとんど心配しています。 質問#1を尋ねるに至ります:これは機能しますか? これに加えて、NoSQLのパフォーマンスとリアルタイムゲームに適していることについて読みました(間違っている可能性があります。私はここに到達するために巨大なRDBMSとNoSQLのフレーム戦争を経験し、おそらく火傷します)。基本的に、すべてのゲームオブジェクトデータにMongoDBを使用します。 繰り返しになりますが、何らかのコンテキストを提供すると役立ちます。240MBのMongoDBパッケージを無料で提供するホスト(MongoLab)を見つけました。アップグレードが必要になるまで使用します。240MBを考えると、約60,000人のプレーヤーを保存できると計算しました(各プレーヤーが約4KBで、保存される可能性のある他のものを無視する場合)。記憶域、および将来的にもっとお金を払わなければならない場合(ゲームが成功する場合)は問題ではありません。私が現在すべてのゲームオブジェクトデータにMongoDBを使用する唯一の理由は、このゲームオブジェクトデータにアクセスする頻度(プレーヤーが殺されたとき、アイテムを拾ったとき、銃を撃ったときなど)のためです。また、単純なスキーマフリードキュメント(ゲームオブジェクトデータのマッピングを容易にする)も好きです。かつて、 私は自分のWebサイトで同じMongoDBを使用して、プレーヤーのプロファイル情報を表示するつもりです(完全な一貫性は気にしません。ゲーム内の更新からの遅延は問題ありません)。2番目の質問、質問2に進みます。これは良いアイデアですか、それとももっと良い方法がありますか? このゲームは、次のような起動エクスペリエンスを備えています。 クライアントのログイン(MongoDB) クライアントは、チャットルーム(MySQL)のあるゲーム内のホームページにあります。 クライアントはサーバーリストに移動します(MySQL) クライアントはサーバーに接続して再生します サーバーはすべてのプレーヤーの更新を通信します(MongoDB) これは私がそれが機能すると想像した方法です。これはあなたによく見えますか、またはこの計画をどのように改善できるかについての提案がありますか?


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のアルゴリズムは連携して機能しますか、それとも相互に排他的ですか?

3
クロスプラットフォームのマルチプレイヤーゲームが存在できないのはなぜですか?
少なくとも、なぜそれらを作るのがそれほど難しいのですか?-それがAAAスタジオでさえ、彼らのゲームでこの偉業を成し遂げなかった理由であると仮定します。特に、Xbox、PS4、およびPCで構築できるUnrealやUnityなどの最新のクロスプラットフォームゲームエンジンでは、なぜこれがまだ大規模に行われていないのですか? たとえば、Diablo IIIはさまざまなプラットフォームでリリースされるゲームです。これは、世界で最も裕福なビデオゲーム会社の1つであるブリザードの製品ですが、XboxプレーヤーをPCを使用して誰かとプレイすることはできません。

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エンジンは、すべての変更を含むパケットを世界のすべてのダニ?繰り返しますが、これはまったく新しいことですが、それほど多くのデータを頻繁にプッシュできますか これが少し乱暴である場合は申し訳ありませんが、基本的には、なぜ私のシンプルなシステムが適切な方法ではないのかと思っていました。

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