我要布局情况,问题在底部。
我有一个像这样的对象:
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(); }
}
在客户端,我只是读取对象并将其绘制到屏幕上。这就是问题发生的地方。我肯定会在每个循环中收到一个对象,但是当我阅读它时,GameObject 的字段似乎没有改变。
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
我觉得我缺少一些基本的东西。虽然当我尝试找到与这个问题有关的其他问题时,我似乎找不到一个。也许你们中的一个可以为我提供一些见解?