我正在使用Java创建一个简单的网络游戏,玩家可以使用键盘按键移动方块。该游戏将在本地服务器上运行,并且具有基本规则:
每个块将以1 FPS的速度自动移动,但是用户可以在这1秒间隔内发送多个移动命令,从而更新块的位置。
代码几乎完成了,但我在服务器和客户端之间同步问题上遇到了麻烦。以下是一些代码/描述,我需要更好地理解它:
基本类
我需要更好地理解如何处理
更具体地说:
1- 以安全的方式更新游戏线程有什么好方法?
2- 如何处理多个命令?使用队列吗?
3- 如何确保客户端和服务器同步?
我是网络编程新手,感谢任何帮助!
每个块将以1 FPS的速度自动移动,但是用户可以在这1秒间隔内发送多个移动命令,从而更新块的位置。
代码几乎完成了,但我在服务器和客户端之间同步问题上遇到了麻烦。以下是一些代码/描述,我需要更好地理解它:
基本类
class Server{
ServerSocket server = new ServerSocket(port);
while (listening) {
Socket client = server.accept();
new Thread(new ClientHandler(client)).start();
}
}
class Game implements Runnable {
public void run() {
while (! gameOver)
tick();
}
}
现在的问题
class ClientHandler implements Runnable
{
Game game;
public ClientHandler(Socket client)
{
this.client = client;
//start game which runs at 1 FPS
long FPS = 1000L;
Timer timer = new Timer();
timer.schedule(new Game(FPS), 0L, FPS);
}
public void run()
{
/** Game is already running, needs to:
*
* 1 - Take any GameInput object from the user and update the game
* 2 - Send a GameState object to the user
* 3 - Client will receive it and render on screen,
* (hopefully in a synch state with the server)
*/
while ( ! game.gameOver)
{
//ObjectInputStream ois = ...;
// Line A
GameInput command = ois.readObject();
// Line B
//GameState state = game.update(command);
//ObjectOutputStream oos = ...;
// Line C
oos.writeObject(state);
}
}
}
我需要更好地理解如何处理
Line A
,Line B
和Line C
。更具体地说:
1- 以安全的方式更新游戏线程有什么好方法?
2- 如何处理多个命令?使用队列吗?
3- 如何确保客户端和服务器同步?
我是网络编程新手,感谢任何帮助!