MMOでプレーヤーのリアルタイムの位置を追跡するにはどうすればよいですか?


14

MMORPGでプレイヤーの位置をどのように追跡しますか?データベースを使用するか、座標をファイルに保存できることを読みました。データベースを使用してみましたが、時間がかかりました。ファイルを使用してプレーヤーの位置を追跡するにはどうすればよいですか?

回答:


23

ファイルを使用してプレーヤーの位置を追跡するにはどうすればよいですか?

プレイヤーの位置をファイルに書き込みます。たとえば、すべてのプレーヤーを一意の番号(またはGUID)で識別する場合、それをファイル名として使用できます。ファイルに、後で解析できる形式で位置データを書き込むだけです。たとえば、プレーヤー#467239がその(x、y、z)の場所にある場合467239.txtが含まれます。20, 3, 19

これは、データベースで行うこととそれほど違いはありませんが、この操作ではデータベースは「低速」であってはならず、非常に高速である必要があります(おそらくディスクIOオーバーヘッドまたはIOロックがあるため、ファイルよりも高速です)競合-ファイルごとに複数の位置を保存した場合-ファイルシステムベースのアプローチで)。

おそらく、実行時にプレーヤーの位置を保存するためにDBまたはファイルシステムを使用しようとしていましたか?これを行うべきではありません

実行時、サーバーでは、他の種類のゲームの場合と同様に、プレーヤーの位置をメモリ内に保持して更新する必要があります。定期的にディスクまたはその他の永続的なストレージに保存できます。たとえば、プレーヤーが休んだとき、保存したとき、ログアウトしたときなどです。

しかし、すべての更新をすべてのプレーヤーのストレージに保存することは不要であり、非常に非効率的です。「大規模な」プレーヤースケールに似たものを処理するのに十分な速度になることはありません。


1
はい、実際には、実行時にプレーヤーの位置をpostgreSQLに保存していました。しかし、サーバーのメモリに保持すると、クライアントの位置をどのように更新できますか?
バカリ

12
クライアントが更新される方法はすべての場合で同じです。サーバーは、ネットワークメッセージを介してクライアントに自分の位置を伝えます(より現実的には、ローカル予測を行っているクライアントもローカル位置を持ち、サーバーはクライアントの検証と確認を行います)。サーバーがアクセスしているデータベースにクライアントがアクセスしないようにしてください。

1
「ファイルを使ってそれを行う」という点を逃しますが、それを説明するのは、実際にはdbを使用してから、実際の問題を説明するよりも悪いです。そもそもなぜその役に立たないファイルの説明が必要なのですか?それはカジュアルな読者を混乱させるだけで、誰にも利益はありません。
o0 '。

6
過去の私の経験では、直接的な質問を無視し、「正しい方法」がどうあるべきかについての講義に進むことは、より対立的である傾向があり、OPは元の質問から弱い基盤から導かれることを受け入れにくくなります。から来て、それがすべてです。

13

使用中は、位置はRAM内になければなりません。(例:プレイヤーのキャラクターは世界にいます)DBを操作メモリとして使用することはできません。できますが、これはひどいものになります。

定期的にポジションを保存する必要がありますが、毎回ポジションを保存する必要はありません。

すべてのポジションを同時に保存することも避けます。サーバーがクラッシュした場合に永続性を維持したい場合は、できるだけ頻繁にゲームの空き時間に位置を保存する必要があります。これをバッチで行うだけです。

空き時間があれば30のポジションを節約してください。

クライアントについては。サーバーソフトウェアへの接続を通じて(関連する)ゲーム状態の更新を受信する必要があります。DBからではありません ...それは非現実的で、遅く、悪い、悪であり、力は乱されます。


2
そして、データベースがゲームループの残りをブロックする可能性がある状況を回避するために、別のスレッドを使用します。
コヨーテ

4

500かそこらのゲームティックごとにファイルに保存するために、キューに個別のスレッドがあります。そうでない場合は、すべてをRAMに保存する必要があります。


4

私のサーバーで行うことは、プレイヤーの方向(ベクトル)と最後の位置を保存することです。プレイヤーに速度がある場合、2秒ごとにプレイヤーの新しい位置を計算します。

クライアントはもちろん独自の位置位置を持ち、新しい方向(ベクトル)をサーバーに送信します。

サーバーは、位置について権限を持ち、クライアントが最後のチェックから特定の距離を移動した場合、位置パケットを送信します(これは、クライアントが同期していない場合、ラバーバンド効果につながる可能性があります)。

もちろん、これはすべてメモリ内で行われます。

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