Java でゲーム用の UDP ソケットを使用してクライアント サーバー プロトコルを実装しています。クライアントからサーバーにユーザー入力を送信しています。サーバーは入力を処理し、プレイヤーやその他のゲーム オブジェクトを含むレベル オブジェクトを更新します。Level オブジェクト (サイズを抑えるための一時的なプロパティも含まれています) をシリアル化し、クライアントに送信しています。サーバーから受信した Level オブジェクトをクライアント上のものとマージしたいのは、サーバーから受信したものはその一時的なプロパティに null 値を持つためです。完全で最新のレベルのオブジェクトを手動で再構築する以外に、これを行う良い方法はありますか? ありがとう!
1 に答える
1
オブジェクトがプロパティのゲッターとセッターを備えた「標準」の Java Bean であると仮定すると、Spring のBeanUtils クラスには役立つユーティリティ メソッドがいくつかあります。どちらのメソッドも という名前copyProperties
で、どちらもあるオブジェクトから別のオブジェクトにプロパティをコピーするためのものです。1 つの方法ではプロパティのホワイトリストを指定でき、もう1 つの方法ではブラックリストを指定できます。これらのメソッドを使用すると、サーバーから受信したレベルにコピーする必要がある、またはコピーしないプロパティのインターフェイスまたはリストを定義し、次のようにコピーを実行できます。
interface LevelPropertiesToMerge {
void setPropertyOne(String something);
void setPropertyTwo(int somethingElse);
}
// serialization code on client
Level fromServer = ...;
Level fromClient = ...;
BeanUtils.copyProperties(fromClient, fromServer, LevelPropertiesToMerge.class);
また:
// serialization code on client
Level fromServer = ...;
Level fromClient = ...;
BeanUtils.copyProperties(fromClient, fromServer,
new String[] {"propertyOneToIgnore", "propertyTwoToIgnore"});
于 2013-03-04T04:03:46.067 に答える