2016-05-18 3 views
0

。セルをクリックすると、プレイヤーは(A *などの経路探索アルゴリズムを使用して)尖った領域に移動します。しかし、私は運動システムのネットワークプロトコルをどのように構築するかについて全く知らない。そして、主題をグーグルは私に多くの手助けをしていないようです。私は選択をする必要があります: - 私は1つのセルから別のものに移動するたびにサーバーにメッセージを送信します(これは全く効率的ではありません。なぜなら、100msのレイテンシネットワークにいる場合、10movements/sec私がサーバーに方向を変えたいとき(別のセルをクリックする)、メッセージを送信するか、サーバーが移動を認識するようにサーバーに要求すると5move/secしかできません。クライアントは定期的にその位置をサーバーに送信し、サーバーが宛先と一貫性があるかどうかを確認します。MMORPG移動プロトコルメカニズム

第2の解決策は、最初のものよりもずっと良く見え、私は本当のゲームシステムは、その戦略を実行しなければならないと思います。私が間違っている?

また

、どのように我々は変更(ハッキング)クライアントが偽の位置を送信し、彼らが望む任意の場所にテレポートすることはできせないソリューションに基づいたシステムを構築することができますか?実際のシステムは、これらの問題を検出して修正しようとする「インコヒーレントな送信位置」システムのような一言を実装していますか?

または実装が簡単なものがありますか?ありがとうございました

+0

ゲームはターンベースになりますか?もしそうなら、私はターンが終わる前にすべての動きを集めて、それらをサーバーにパッケージとして送るだろう。そこから行く。今すぐリアルタイムであれば、すべての動きをサーバーに送信します。 – ScarletMerlin

+0

良い質問:)いいえ、リアルタイムですが、サーバーに各動きを送信する必要はありません。クライアントとサーバーの間で同期が必要です(ローカルとオンラインの位置は常に非常に近いものでなければなりません) –

答えて

1

ScarletMerlinのおかげで、私の問題は簡単に解決できると思います。

プレイヤーが(例えば10,10のために)別の(例えば0,0など)一つの位置から移動したい場合、それはサーバに対して「MOVE 10 10」メッセージを送信します。

その後、唯一のサーバーは、経路探索アルゴリズムを適用し、各クライアントに位置を移動した後に送信します。 (例えば、メッセージCURRENTLY_ON X Yによって)。次に、クライアントはプレーヤーの位置を更新します。

これは、サーバーからクライアントへの自動同期の一種です。また、パイプライン処理のおかげで、最初の解決策(1つの移動と1つの移動につき1つのACK)の問題も解決します。たとえば、ネットワークが1000msの遅延を持ち、移動が50msに設定されている場合、時間1000、1050、1100、1150、...でメッセージを受信するだけです。したがって、プレーヤーが方向を変えているときに遅れを感じます。 ある方向から別の方向に変更するときにも、ユーザーはある程度の遅れを感じますが、遅延が非常に小さく、対称的であると仮定すると(あまりにも強い仮定ではないように思われます)、あまり知覚されませんCURRENTLY_ONメッセージの送信前に変更方向が頻繁に到着し、サーバーは現在のアクションを中断して(まっすぐに進んで)新しい方向を処理できます。

1

リアルタイムゲームでは、私はパンティングを作りました。私はスピード*時間=距離のような公式を使用します。

は今、あなたは、クライアントとサーバーで同じロジックを実行する場合にのみ、先頭に移動ロジックを送信する必要があるとの距離を旅しているとき、サーバは終了メッセージで応答することができます。

クライアントが移動して別の場所に移動すると、パンテーションのキャンセルと移動した時間が送信されます。 panthingを変更するときも同じことが起こります(この場合、新しい時間と場所を見つめる新しいパスを送信します)。

+0

そうですね、2番目のアプローチのようなものを使います。セキュリティ上の問題にどのように対処しますか?たとえば、あなたは動きをキャンセルしています。私はあなたがXとYのpostionを送信する必要があると思います。なぜなら、同期の問題がなければ、クライアントとサーバーの間に不一致が生じるからです。そして、どのようにして偽のX、Yポジションを送信しないようにしますか?(ハッカーがプレーヤーをテレポートするために独自のメッセージを送信しようとした場合など) ありがとうございました:) –

+0

サーバーはパスロジックも実行しています(サーバーは、いつでもどこにいるかを知っています)。 x、yに0,0から移動したい場合。あなたがあなたが彼が動いていると言ったので、サーバーは時間を数え始めます。あなたがキャンセルした場合、あなたは私がx時間で移動を停止するサーバーを教えて私は(それゆえ、あなたが必要とするすべてのパスがキャンセルされた時間である。)yの位置になければならない – ScarletMerlin

+0

はい、私は、クライアントとサーバー間の同期であることを考えますはるかに複雑な問題(何時にクライアントの時間を使うことができますか?サーバーの時間は何ミリ秒でそれを共有することができますか)。例えば、レイテンシが0msから1000msまで変化する可能性がある場合、そのシステムを使用すると予測できない結果が生じることがあります。私が間違っている? –