2016-06-16 5 views
-3

私は答えが必要ないくつかの質問があります。私はオブジェクトをシリアル化して渡すか、必要な変数をダンプしてサーバーの終わりにゲームの状態を再構築すれば、パフォーマンスの違いはどうなるのだろうかと思います。私が好奇心が強い理由は、クライアントとサーバーの両方によって物理が処理されるゲームを作成し、正しく動作している(誰もハッキングしていない)ゲームを作成しているからです。何が最良のコースであるかを知りたい行動の現在のゲームの状態を取得し、インターネットを介して送信

いくつかの情報: JavaでLibgdx apiで書かれた2Dゲームで、現在私のネットワークバックエンドとしてnettyを使用しています。

私はここからノートを取っている: http://gafferongames.com/networked-physics/the-physics-simulation/

+1

これは、StackOverflowの非常に幅広いテーマであり、おそらくオフトピックです。簡単な答えは、あなたに最適な方法でコードを記述し、パフォーマンスの問題が発生した場合に後で最適化することです。 _ "オブジェクトをシリアライズする" _と_ "必要な変数をダンプし、サーバー側でゲームの状態を再構築する" _両方とも本質的に同じことを意味しますが、最初のケースでは組み込みシリアル化を使用し、独自のシリアライゼーションコード。 –

+0

あなたは有効なポイントを上げますが、それは本質的には同じものです。私はシリアル化がボトルネックか何かを導入するかどうか、私はこれまでこれまでに働いたことがないので不思議に思っていました。しかし、私はそれを試してみます。 –

答えて

1

ジム・ギャリソンが言ったように、それは非常に広範な問題であり、あなたが最初にあなたのコードを記述し、後でそれを最適化するが、私はあなたについてのいくつかのポインタを与える必要があります同じ。

データは任意の方法で送信することができます。最初はもっと好きなものの問題です。まず、Javaオブジェクトのシリアライズを使用して、ネットワーク経由で送信します。データのシリアライズについては、Kryoのようなライブラリを使用することをお勧めします。これは、inbuilt Javaのシリアル化と比較すると非常に高速です。さまざまなjvmシリアライザのパフォーマンスを確認するには、linkに従ってください。

初心者の方は、ネットワークコードを書くためのライブラリKryonetをご利用いただけます。 Kryonetは、Kryoシリアライザを使用してJavaオブジェクトをシリアル化し、ネットワーク経由でそれらを送信します。それは非常に使いやすいです。

後で、自分のプロトコルを書くことができるNettyというネットワーキングライブラリに進むことができます。あなたが言ったように、あなたに最も適したプロトコルを書くことができます。ペアのNettyをGoogle's Protobufとすると、トップシリアライザを備えた本当に良いネットワーキングライブラリが得られます。私は現在、それらを一緒に使用しています。私は、protobufを使用して私のカスタムメッセージを定義し、nettyが提供するprotobufのための組み込みサポートを定義する方法が好きです。

最後に、あなたのゲームをハッキングしている限り、それはまったく異なる質問でなければなりません。あなたのゲームが成功し、人々があなたのゲームをハックしたいと感じたら、あなたは同じことを避ける方法を理解するために既に十分な知識を得ているでしょう:)

幸運を祈る!私は答えが正しい方向にあなたを指摘したことを願っています。

+0

私はProtobufのことを聞いたことがありませんでしたが、私は既にNettyをネットワーキングに使用しているので、それを調べます。 –

関連する問題