状況をレイアウトします。質問は一番下にあります。
私は次のようなオブジェクトを持っています:
public class GameObject implements Serializable{
/**
*
*/
private static final long serialVersionUID = 3081889342394131807L;
public float x, y, vx, vy;
public int size;
public int mass;
public GameObject()
{
Random rand = new Random();
x = rand.nextInt(400);
y = rand.nextInt(400);
size = rand.nextInt(10);
mass = size * size * size;
vx = 0.3f;
vy = 0.3f;
}
public void updateGameObject()
{
x+=vx;
y+=vy;
}
}
ソケットを使用してクライアント サーバーをセットアップしました。サーバーが起動すると、GameObject が作成され、HashMap に追加されます。次に、サーバーはループし、オブジェクトを更新して、更新されたオブジェクトを送信します。接続は標準ソケットです。
while (true)
{
gameObject.updateGameObject();
try {
if (objOutputStream == null)
objOutputStream = new ObjectOutputStream(connection.getOutputStream());
objOutputStream.writeObject(o);
objOutputStream.flush();
} catch (Exception e) { e.printStackTrace(); }
}
クライアント側では、オブジェクトを読み取って画面に描画するだけです。ここで問題が発生します。ループごとに確実にオブジェクトを受け取っていますが、それを読んでもゲームオブジェクトのフィールドが変化していないようです。
while (true)
{
try {
if (objInputStream == null)
objInputStream = new ObjectInputStream(connection.getInputStream());
return objInputStream.readObject();
} catch (Exception e) { e.printStackTrace(); }
}
objInputStream と objOutputStream は両方とも while ループの上で初期化されます。
クライアントで取得しているオブジェクトの x 値と y 値に対して println() を実行すると、値が初期値から変化することはありません。
サーバーの x 値と y 値を送信する直前に println() を実行すると、正しい値が出力されます。そのようなもの:
Sending Object with 1, 1
Received Object with 1, 1
Sending Object with 2, 2
Received Object with 1, 1
Sending Object with 3, 3
Received Object with 1, 1
何か基本的なものが欠けているように感じます。この問題で他の質問を見つけようとすると、見つけられないようです。多分あなたの一人が私にいくつかの洞察を提供できますか?